|   
 UID1 威望1240 点 金钱24019 金币 点卡317 点 
 | 
1#
 发表于 2005-8-24 12:35 
 | 只看该作者 
 一段精巧的闭包代码
| 来源:www.leohacks.com 一段精巧的闭包代码。偶从PerlChina看到的。关于权限组的,估计对16你有很大的启发:)
 偶正在研究中:)
 代码来自于 MT blog 程序的 MT:
  ermission.pm 包 复制代码{       my @Perms = (#### 定义权限,这是一个复合数组          [ 1, ';admin';, ';Administrator';, ],[ 2, ';post';, ';Post';, ],[ 4, ';upload';, ';Upload File';, ],[ 8, ';edit_all_posts';, ';Edit All Posts';, ],[ 16, ';edit_templates';, ';Edit Templates';, ],[ 32, ';edit_authors';, ';Edit Authors & Permissions';, ],[ 64, ';edit_config';, ';Configure Weblog';, ],[ 128, ';rebuild';, ';Rebuild Files';, ],[ 256, ';send_notifications';, ';Send Notifications';, ],[ 512, ';edit_categories';, ';Edit Categories';, ],[ 1024, ';edit_notifications';, ';Edit Address Book'; ],[ 2048, ';edit_blog_config';, ';Configure Weblog Preferences'; ],);sub set_full_permissions {###  这是设置全权限,其实权限只是数字码,把上面数组中的数字全加,就是全权限了my $perms = shift;my $mask = 0;for my $ref (@Perms) {$mask += $ref->[0];}$perms->role_mask($mask);}sub set_permissions {####  这个函数是我加的,呵呵,上面有两个权限也是我加的。my $perms = shift;my $mask = 2014;$perms->role_mask($mask);}sub perms { \@Perms }#### 这是返回数组引用####################################### 闭包从最前面的 { 花括号开始的域中,到结束的 } 中####################################### 这里是闭包的处理,自动生成函数no strict ';refs';;####### 允许使用符号表for my $ref (@Perms) {####### 对数组中的每一个,生成一个函数my $mask = $ref->[0];my $meth = ';can_'; . $ref->[1];#  这是函数名定义,如 admin 权限是 1, 这个函数就是 can_admin()*$meth = sub {#  这是符号表的匿名函数my $flags = $_[0]->role_mask || 0;#if (@_ == 2) {#    $flags = $_[1] ? ($flags | $mask) :#                    ($flags & ~$mask);#    $_[0]->role_mask($flags);#}$flags & $mask;};}}sub can_edit_entry {my $perms = shift;my($entry, $author) = @_;$perms->can_edit_all_posts ||      ($perms->can_post &&      $entry->author_id == $author->id);}1; 
 | 
 
| 我是一个呼吸着现在的空气而生活在过去的人
 这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
 我已习惯了孤独,爱上孤独
 他让我看清了自我,还原了自我
 让我再静静的沉思中得到快乐和满足
 再孤独的世界里我一遍又一遍
 不厌其烦的改写着自己的过去
 延伸到现在与未来
 然而那只是泡沫般的美梦
 产生的时刻又伴随着破灭的到来
 在灰飞烟灭的瞬间我看到的是过程的美丽
 而不是结果的悲哀。。。
 
 |  |