为什么这段代码在perl中不起作用......简单

时间:2010-08-03 09:10:44

标签: perl

#!usr/bin/perl
$file_name = "file.txt";
open(FILE,$file_name);
while(<FILE>)
{
my $line = $_;
if($line =~ m/Svr\b/)
{
my $server_name;
$server_name  = $1;
print $server_name;
}
}

file.txt的:

 ewrerfSvr//To be extracted
 Rate=rpm
 ID=123
 RATE=45
 ADDR=retriveBal
 Grocer="-r -e ${MAIN_ROOT}/logs/stderr -o ${MAIN_ROOT}/logs/stdout -A --"
freedonSvr
 BALFSvr   //to be extracted
 Rate=rpm1
 ID=12323
 RATE=45etf
 ADDR=retriveBal
 Grocer="-r -e ${MAIN_ROOT}/logs/stderr -o ${MAIN_ROOT}/logs/stdout -A --"
freedonSvr -D ${REV_AccountBalance_NAME}"//

我还要提取:

 REV_AccountBalance

建议我使用正则表达式来做到这一点。

2 个答案:

答案 0 :(得分:4)

#!usr/bin/perl
use strict;
use warnings;

my $file_name = "file.txt";
open(my $fh,$file_name) or die "Could not open file";

while(<$fh>) {
    if (m/(\w*Svr)\b/) { print "$1\n"; }
}

您应该习惯使用warningsstrict并捕获来自open等来电的错误。

特别是在回答您的问题时,您需要在正则表达式中使用括号来提取$N个变量。

答案 1 :(得分:2)

$1会在捕获括号时为您提供匹配字符串的一部分,但您没有这些。你的意思是你的正则表达式是m/Svr\b(.+)/吗?请显示您想要获得的输出; file.txt中的注释不够明确。