在 Perl 中保留子例程响应并设置为变量

Hold Subroutine response and set to variable in Perl

我的代码:

#!/usr/bin/perl 
use strict;
use warnings;

thesub("hello");

sub thesub {
   my $class = shift;
   my $self = shift;
   return $self;

}
my $testvar = thesub();

print $testvar;

$testvar 什么都不打印,我想打印 hello。 我打算将 thesub() 更改为 \&thesub,但不起作用。

我读到在 Perl 中,标量变量不能直接保存子例程。

我该如何解决这个问题?

谢谢。

您将一个参数传递给 thesub(),但它需要两个参数。所以 "hello" 最终变成了 $class$self 最终什么都不包含(或者更准确地说,undef)。最简单的修复是删除分配给 $class 的行。但我不确定这是否是最佳解决方案,因为我不太清楚您在这里实际尝试做什么。

变量名($class$self)让我觉得您正在阅读有关面向对象编程的教程。但是这里没有 OO。

此外,我想不出在 OO Perl 中将 $class$self 都传递给方法的情况。

你没有包,所以我假设你不想使用 class,

use strict;
use warnings;
use v5.10;

sub thesub {
    state $stored;

    $stored = shift if @_;
    return $stored;
}

thesub("hello");
print thesub();