【发布时间】:2019-03-07 23:47:59
【问题描述】:
我有一个来自 for 循环的字符串:
@file = "/path/window/*_testing_42.csv";
foreach $file(@file) {
$name = $file=~ /(\w*)_testing_42/; #comes from file path
$name = 1$;
print $name; #prints G43B76P90T45
}
我需要这个字符串中的 4 个值(G43、B76、P90、T45)。我想将它们放入散列中,以便我可以具体引用每个值。但是,我尝试实现的哈希表代码无法达到我的预期目的:
my %hash;
foreach $file(@file) {
$name = $file=~ /(\w*)_testing_42/; #comes from file path
$name = 1$;
print $name; #prints G43B76P90T45
my($first $second $third $fourth) = $name;
$hash{"first"} = $first;
$hash{"second"} = $second;
$hash{"third"} = $third;
$hash{"fourth"} = $fourth;
预期输出:
print $fourth; #should print T45
print $first; #should print G43
print $third #should print P90
}
【问题讨论】:
-
贴出的代码是不正确的 Perl,它无法运行(即使它是完整的)并且不会产生 cmets 显示的代码。你能发布你的实际代码吗?这对帮助您有很大帮助。
-
我也不清楚您是要对
@files中的文件名进行模式匹配,还是要打开文件,从中读取数据行并匹配那些线?如果您可以提供匹配的文件名示例或文件内容示例,将会很有帮助。 -
@zdim 代码已编辑/更新...任何帮助将不胜感激
-
@GrantMcLean 我只想能够将字符串 ($name) 中的四个字符串值放入单独的哈希键值中。我更新了文件名的代码。它是全局的,所以它有多个值......
-
将字符串
'G43B76P90T45'分解为“字母数字”模式(我从问题中假设的目标):my @parts = 'G43B76P90T45' =~ /([a-zA-Z][0-9]+)/g;但问题中显示的代码是“非法的”,具有许多基本语法错误,我无法判断上述内容是否真的适用于您的真实代码。再一次:请向我们展示您的实际代码:)