【发布时间】:2014-05-21 16:46:29
【问题描述】:
我写了这段代码:
my $id = shift;
my $file = shift;
unless(open (INFO, $file)) { print "cant open file\n"; return 0; }
#this is how i do it - i didn't copy the code directly last time:
while(my $line = <info>)
{
if($line =~ /d\s+S+\s\Q$id\disk\d+s\d+/g)
{
print "yay i found it";
close(INFO);
return 1;
}
}
close(INFO);
return 0;
一个很好的例子是:
2: Apple_HFS 0x123456789ABC 999.9 GB disk2s2
(你可以看到 $id 是“0x123456789ABC”)
我的问题:它不起作用 - 它打开文件并读取行但加工不好。请告诉我我在这里错过了什么?我想我的正则表达式是错误的,但我无法修复它。
我尝试了谷歌和(当然)堆栈溢出(How to evaluate a word saved in a scalar via regular expression in Perl?、Detect exact string value of scalar in regex matching、Use variable as RegEx pattern)但没有运气。 我确定我缺少一些基础知识,但这不是我的第一个正则表达式 - 只是其中包含标量的第一个。
谢谢
【问题讨论】:
-
$file是文件的名称。您打开它,但从未真正读取其中的任何内容。而且您的正则表达式没有考虑每条记录中的大小字段999.9 GB -
谢谢大家。我原来的问题是正则表达式本身。你们所有人都为此提供了帮助。 @Borodin 的回答也为我提供了一个更“令人愉快”的解决方案。他的 cmets 还教会了我一些重要的东西。所以我将他的答案标记为最佳。