循环失败。数组出了什么问题?
我希望正则表达式在解析第一个字符串时返回 B
,在解析第二个字符串时返回 M
。
这样的正则表达式是如何构造的?
#!/usr/bin/perl
use warnings;
use strict;
my $a = "0.0 B/s";
my $b = "12.0 MiB/s";
while (defined (my $s = shift ("$a", "$b"))) {
my $unit = $1 if ($a =~ m/.*([KMGT])i?B\/s$/);
print "$unit\n";
}
最佳答案
shift
适用于数组,而不是列表。如果你想使用 while
循环,你需要预先声明一个包含 $a
和 $b
的数组(顺便说一句, ,对于变量名来说是一个糟糕的选择)。
话虽如此,for
循环结构是更自然的选择:
for my $s ( $var1, $var2 ) { ... }
鉴于您正在尝试提取测量单位,为什么不以稍微不同的方式做事:
say for map { my ( $s ) = /$regex/; $s } $var1, $var2;
关于regex - while、数组和正则表达式的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085768/