我只是想缩短线路的指派HTML ::元素 - > as_trimmed_text从HTML ::元素的数组到一些变量的代码 - 非常标准的东西,如:

my ($var1, var2) = ($columns[1]->as_trimmed_text, $columns[2]->as_trimmed_text);

..不同之处在于有几个列,以便它继续超过几行。我有我可以使用地图,而不是明亮的想法,但我真的不多少运气。我已经试过上

的变化
map { $_->as_trimmed_text } @columns[1, 3, 5, 7, 9]

但总是收到无法调用方法“as_trimmed_text”未经包或对象引用。

是否有可能做什么,我想还是应该只是坚持我目前有?

TIA

编辑:柱 - >列

有帮助吗?

解决方案

首先,如果你不感兴趣的地图的输出,你不应该使用的地图。地图,如grep,排序等是一个过滤器。如果你不想输出,使用的foreach。

但你是正确的,图的目的是要解决究竟这类问题。这会给你想要的输出,但它不使用数组片段。

@trimmed_columns = map { $column[$_]->as_trimmed_text } (1, 3, 5, 7, 9);

罗伯特·普的回答更好地解释为什么原来没有工作。

其他提示

发现:

下面是一些代码模仿什么的应该的发生:

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有效的值的范围之外,因此它autovivifies一个新条目,并使其undef。然后,地图确实

undef->as_trimmed_output()

其中barfs。我会再次检查您的阵列片,并确保你没有可用的实际指标外敛值,和禁止的是,确认你实际上是处理HTML ::元件要素与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

所以,仔细检查,以确保您的数组的内容实际上是你想调用的方法的类的所有祝福的实例。

map看起来我的权利。你确定第二个应该说@columns代替@column?你有strict开启赶上错别字在变量名?

您正在使用在第二实施例@columns另一个变量,但不是@column。尝试使用以下代码:

map { $_->as_trimmed_text } @column[1, 3, 5, 7, 9]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top