是否可以对n维PDL
变量执行正则表达式?
例如,我可以通过将所有元素加100
$a1 = pdl [1,2];
print $a1 + 100;
但是,如果我的数组是一串我想对其执行某些任务的字符串,该怎么办?例如,这失败了:
$a = pdl ['suze','david'];
$a =~ s/suze/female/;
print $a;
不知道这是否有可能,但在此先感谢。
最佳答案
关键是,PDL
是perl扩展,旨在用于科学和批量数字数据处理和显示。因此,它并不是String操作的真正原因。当您尝试反复进行时:
use strict;
use warnings;
use PDL;
my $a = pdl ['suze','david'];
print $_ . "\n" foreach ($a->list);
你会得到:
Argument "suze" isn't numeric in subroutine entry at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 1296, <DATA> line 207.
0
0
Argument "david" isn't numeric in subroutine entry at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 1296, <DATA> line 207.
深入了解POD时,您会发现:
$a = pdl(SCALAR|ARRAY REFERENCE|ARRAY|STRING);
对于构造函数及其后的
STRING
文本pdl的字符串版本还允许您使用字符串bad,inf和nan,并且它将插入您要表示的值(如果使用bad,则设置bad标志)。您可以混合并匹配大小写,尽管不应这样做。
回到您的主要问题,为什么对字符串使用
PDL
? -为什么不使用简单的数组?use strict;
use warnings;
use Data::Dumper;
my $a = ['suze','david'];
s/suze/female/ for @{$a};
print Dumper $a;
输出:
$VAR1 = [
'female',
'david'
];