找到了:
这是一些模拟应该发生的事情的代码:
use strict;
use warnings;
package Text;
sub new
{
my $class = shift;
my $text = shift;
return bless { TEXT => $text }, $class;
}
sub as_trimmed_text
{
my $self = shift;
my $text = $self->{TEXT};
$text =~ s/^\s*(.*?)\s*$/$1/;
return $text;
}
package main;
my @texts = ( Text->new(' foo '), Text->new(' bar '), Text->new(' baz '));
my @trimmed = map { $_->as_trimmed_text() } @texts[1, 2];
print "Trimmed were: ", join(',', map { "'$_'" } @trimmed);
这行得通,并且工作正常;我得到:
Trimmed were: 'bar','baz'
但是如果我用这一行替换地图:
my @trimmed = map { $_->as_trimmed_text() } @texts[2, 3];
突然间我得到了这个输出:
Can't call method "as_trimmed_text" on an undefined value
这是因为 '3' 超出了@texts 中的有效值范围,因此它会自动激活一个新条目,并将其设为undef
. 然后,你的地图
undef->as_trimmed_output()
哪个呕吐物。我会再次检查您的数组切片,并确保您没有在可用的实际索引之外获取值,除此之外,请验证您实际上是在使用 that 处理 HTML::Element 成员map
。快速Data::Dumper::Dumper
了解其中的值@columns
将有很大帮助。
例如,如果您随后将数组更改为包含
my @texts = ( Text->new(' foo '), Text->new(' bar '), ' baz ');
并尝试运行它,我现在得到你的错误:
Can't call method "as_trimmed_text" without a package or object reference at map.pl
因此,请仔细检查以确保您的数组的内容实际上都是您尝试调用其方法的类的所有受祝福的实例。