在 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();
我的代码:
#!/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();