我有从HTML::Element
和HTML::Element->find
获得的HTML::TreeBuilder
数组,我需要将其as_text
值分配给其他一些变量。我知道我真的很容易做到
my ($var1, $var2) = ($arr[0]->as_text, $arr[1]->as_text);
但我希望我可以使用map
来代替使代码更具可读性,因为数组中至少有8个元素。我是Perl的新手,所以我不太清楚该怎么做。
有人能指出我正确的方向吗?
答案 0 :(得分:9)
如果你精通perldoc -f map
,那就非常清楚:
my @as_texts = map { $_->as_text } @arr;
如果要分配标量列表,也可以使用
my($var1, $var2, $var3, ...) = map { $_->as_text } @arr;
但是,对于未知数量的元素,阵列版本当然更好。
答案 1 :(得分:1)
请注意,如果您只想映射@arr
的前两个元素:
my($var1, $var2) = map { $_->as_text } @arr;
将为$_->as_text
的所有元素调用@arr
。在这种情况下,请使用数组切片以避免不必要的调用:
my($var1, $var2) = map { $_->as_text } @arr[0 .. 1];
示例:
#!/usr/bin/perl
use strict;
use warnings;
my @arr = 'a' .. 'z';
my $count;
my ($x, $y) = map { $count++; ord } @arr;
print "$x\t$y\t$count\n";
$count = 0;
($x, $y) = map { $count++; uc } @arr[0 .. 1];
print "$x\t$y\t$count\n";
输出:
C:\Temp> jk 97 98 26 A B 2为
ord
的每个元素调用了{p> @arr
,而uc
只调用了我们感兴趣的元素。