bar*_*ter 16 perl alias function
在Perl中,如果我想做的foo()话bar(),我可以这样做:
sub foo {return bar(@_);}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?更接近Ruby的"别名"运算符?
mob*_*mob 28
在一个更好的方法,通过采用Exporter和类似的模块,是编辑符号表:
*foo = \&bar;
Run Code Online (Sandbox Code Playgroud)
(编辑,因为这是我们正在谈论的Perl)
Nar*_*son 14
还有另一种方法:
sub foo {goto &bar}
Run Code Online (Sandbox Code Playgroud)
这保留了之间的等价foo,bar即使bar随后重新定义.
这是一个详细的演示:
use strict;
use warnings;
sub bar {
print "This is the original bar().\n";
}
*bar_copy = \&bar;
sub bar_link {
goto &bar;
}
print "Executing bar_copy:\n";
bar_copy();
print "Executing bar_link:\n";
bar_link();
*bar = sub {print "This is bar(), redefined.\n"};
print "Executing bar_copy after redefinition:\n";
bar_copy();
print "Executing bar_link after redefinition:\n";
bar_link();
Run Code Online (Sandbox Code Playgroud)
打印
Executing bar_copy: This is the original bar(). Executing bar_link: This is the original bar(). Subroutine main::bar redefined at C:\scripts\temp.pl line 19. Executing bar_copy after redefinition: This is the original bar(). Executing bar_link after redefinition: This is bar(), redefined.
yst*_*sth 12
*foo = \&bar;
Run Code Online (Sandbox Code Playgroud)
分配对glob的引用会将glob的那部分替换为所引用的thingy.所以这使&foo与&bar完全相同.
*foo = *bar; # or \*bar
Run Code Online (Sandbox Code Playgroud)
这也有效,但也可以在foo和bar之间对标量,数组,散列,文件句柄和格式进行别名.
由佩尔蒙克斯提供:
sub bar { print( "Hello World\n" ); }
BEGIN { *foo = \&bar; }
foo();
bar();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6934 次 |
| 最近记录: |