gpt4 book ai didi

perl - 我可以将 Perl 的映射与数组切片一起使用吗?

转载 作者:行者123 更新时间:2023-12-02 05:32:15 24 4
gpt4 key购买 nike

我只是想缩短将 HTML::Element->as_trimmed_text 从 HTML::Elements 数组分配给一些变量的代码行——非常标准的东西,比如:

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

..除了有更多的列,所以它继续多行。我有一个好主意,我可以使用 map 代替,但我真的没有太多运气。我试过变体

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

但我不断收到 Can't call method "as_trimmed_text"without a package or object reference.

是否有可能做我正在尝试的事情,还是我应该坚持我目前拥有的东西?

TIA

编辑:列 -> 列

最佳答案

找到了:

这里有一些代码可以模拟应该发生的事情:

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'

但是如果我用这条线替换 map :

my @trimmed = map { $_->as_trimmed_text() } @texts[2, 3];

突然间我得到了这个输出:

Can't call method "as_trimmed_text" on an undefined value

这是因为 '3' 超出了@texts 中的有效值范围,所以它自动生成一个新条目,并使其成为 undef。然后,您的 map 会

undef->as_trimmed_output()

哪些呕吐。我会再次检查您的数组切片,并确保您没有获取可用的实际索引之外的值,并且除此之外,验证您实际上正在使用该 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

因此,仔细检查以确保数组的内容实际上都是您尝试调用其方法的类的所有实例。

关于perl - 我可以将 Perl 的映射与数组切片一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com