在Perl中,如何将打印函数分配给变量?

old*_*ide 1 perl namespaces

我需要使用变量控制打印方法

我的代码如下

#!/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)

看起来我需要为打印函数添加命名空间前缀,但我找不到命名空间。谢谢您的任何建议!

ike*_*ami 7

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)

有关的: