發現:
下面是一些代碼,它模擬什麼應該發生:
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()
哪個barfs。我會再次檢查你的數組片段,並確保你沒有獲取可用實際索引之外的值,並且除此之外,請驗證你是否正在處理具有該map
的HTML :: Element成員。有關@columns
中值的快速Data::Dumper::Dumper
將非常有幫助。
例如,如果你再改變你的數組包含
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
所以,仔細檢查,以確保內容你的數組實際上是你試圖調用方法的類的所有祝福實例。
目前看起來您正在使用不同的變量:第一個示例爲「@ column」,第二個爲「@ columns」。但是使用「地圖」的想法很好 – 2009-11-05 22:25:27
這是行不通的嗎? 'map {$ columns [$ _] - > as_trimmed_text} 1,3,5,7,9' – 2009-11-05 22:31:43
你可能需要在你正在做的事情中添加更多的代碼;這對我來說是正確的。 – 2009-11-05 22:31:56