我需要使用变量控制打印方法
我的代码如下
#!/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)
看起来我需要为打印函数添加命名空间前缀,但我找不到命名空间。谢谢您的任何建议!
print是一个操作符,而不是一个子操作符。
效果:
本节中的函数可以充当表达式中的项。它们分为两大类:列表运算符和命名一元运算符。
Perl 为命名运算符提供了一个子函数,可以通过具有原型的子函数来复制该子函数。可以使用 获得对这些内容的参考\&CORE::name。
my $f = \&CORE::length;
say $f->("abc"); # 3
Run Code Online (Sandbox Code Playgroud)
但print不是这样的运算符(因为它接受文件句柄的方式)。对于这些,您需要创建一个具有更有限的调用约定的子程序。
my $f = sub { print @_ };
$f->("abc\n");
Run Code Online (Sandbox Code Playgroud)
有关的: