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

标签 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");
当我运行时,打印功能的分配出现以下错误
$ test_assign_func.pl
from echo: hello

Undefined subroutine &main::print called at test_assign_func.pl line 17.
看起来我需要为命名空间添加前缀来打印函数,但我找不到命名空间。感谢您的任何建议!

最佳答案

print是一个运算符,而不是一个子。
功能:

The functions in this section can serve as terms in an expression. They fall into two major categories: list operators and named unary operators.


Perl 为命名操作符提供了一个 sub ,可以被一个带有原型(prototype)的 sub 复制。可以使用 \&CORE::name 获得对这些的引用。 .
my $f = \&CORE::length;
say $f->("abc");   # 3
但是print不是这样的运算符(因为它接受文件句柄的方式)。对于这些,您需要创建一个具有更有限调用约定的子程序。
my $f = sub { print @_ };
$f->("abc\n");
有关的:
  • What are Perl built-in operators/functions?
  • 关于perl - 在 Perl 中,如何将打印函数分配给变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69226416/

    相关文章:

    perl - 在无效上下文中无用的数字lt(<)

    c++ - 重复符号问题

    perl - 子例程返回空字符串而不是哈希引用

    linux - 使用 unix 排序对字母数字进行排序

    php - PRCE : substring exclusion in capturing group result

    namespaces - unshare 命令不会创建新的 PID 命名空间

    c# - 为什么命名空间类型不应该依赖于嵌套的命名空间类型?

    ruby - 如何动态创建也在命名空间中的子类?

    c++ - C++项目中如何更好的组织代码

    sorting - Perl 按值对哈希进行排序