什么语法,如果有的话,能够引用内置的像shift?
$shift_ref = $your_magic_syntax_here;
Run Code Online (Sandbox Code Playgroud)
您可以使用与用户定义的子相同的方式:
sub test { ... }
$test_ref = \&test;
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,但都不起作用:
\&shift
\&CORE::shift
\&{'shift'}
\&{'CORE::shift'}
Run Code Online (Sandbox Code Playgroud)
如果需要,你的答案可以包括XS,但我不愿意.
澄清:我正在寻找一种通用解决方案,可以从任何内置程序获得功能齐全的代码参考.然后可以将此coderef传递给任何更高阶的函数,就像对用户定义的子的引用一样.到目前为止似乎是共识,这是不可能的,任何人都不同意?
我读起的Perl西蒙科泽斯并在第8章-子程序他指出,"子程序"的用户功能,同时print,open,split等是内置的运算符或函数.
这些是什么?它们是真正内置的,语言固有的特性(如C的sizeof运算符)还是它们实际上是main模块的子程序/函数?
如果他们的子程序,有while,for,unless,等也子程序?什么样的运营商+,-,eq等?
我需要使用变量控制打印方法
我的代码如下
#!/usr/bin/perl
# test_assign_func.pl
use strict;
use warnings;
sub echo {
my ($string) = @_;
print "from echo: $string\n\n";
}
my $myprint = \&echo;
$myprint->("hello");
$myprint = \&print;
$myprint->("world");
Run Code Online (Sandbox Code Playgroud)
当我运行时,我收到以下打印函数分配错误
$ test_assign_func.pl
from echo: hello
Undefined subroutine &main::print called at test_assign_func.pl line 17.
Run Code Online (Sandbox Code Playgroud)
看起来我需要为打印函数添加命名空间前缀,但我找不到命名空间。谢谢您的任何建议!