我正在尝试读取一个文件并保存以$ path开头的行,直到它遇到数组中的第一个balnk行。我有下面的代码,它只打印路径名而不是行。有人可以看看。
Below are the contents of the $file:
\sbd\archieve\date\form
-rwxrwxrwx 1 etd maadm 4354270 Aug 16 21:56 COMAHCUT.dat.20120816.ftpd.201208162156*
-rw-r--r-- 1 etd maadm 0 Aug 16 21:56 COMAHCUT.DONE.20120816.ftpd.201208162156
\sbd\single\archieve\date\form
-rwxr-xr-x 1 etd maadm 1362780 Aug 15 22:02 COMAINS.dat.ftpd.201208152203*
-rwxr-xr-x 1 etd maadm 0 Aug 15 22:02 COMAINS.DONE.ftpd.201208152203*
Below is the code i tried:
#!/usr/bin/perl
my $file = "/home/pauler/practice/DataIt/line.txt";
open (INFO, $file) or die "Cannot open the file $file :$! \n";
my $path = "\sbd\archieve\date\form";
foreach $line (<INFO>) {
if ($line =~ m/$path/) {
push (@array1, $line);
last if ($line =~ m/^$/);
print @array1;
}
}
答案 0 :(得分:1)
触发器操作符..
可以挽救生命...我们的代码。它保持为假,直到左边的表达式返回true,并且在右边的表达式变为true之前保持为true ...然后它再次为false,直到左表达式再次计算为true。
# read lines into $_ for cleaner code
while (<INFO>) {
if (/$path/ .. /^$/) {
push @array1, $_;
}
}
print @array1;
哦,关于路径的说明......我知道没有一个真正需要反斜杠的操作系统,甚至不需要Windows ...使用普通斜线/
可以避免奇怪的转义序列和潜伏在其中的其他魔法暗
答案 1 :(得分:1)
您可以利用文件句柄记住文件中的位置这一事实。
use strict;
use warnings;
my @array;
my $path = '\sbd\archieve\date\form';
while ( my $line = <DATA> ) {
next unless $line =~ /\Q$path\E/;
push @array, $line;
while ( my $line = <DATA> ) {
last if $line =~ /^\s*$/;
push @array, $line;
}
}
print @array;
__DATA__
\sbd\archieve\date\form
-rwxrwxrwx 1 etd maadm 4354270 Aug 16 21:56 COMAHCUT.dat.20120816.ftpd.201208162156*
-rw-r--r-- 1 etd maadm 0 Aug 16 21:56 COMAHCUT.DONE.20120816.ftpd.201208162156
\sbd\single\archieve\date\form
-rwxr-xr-x 1 etd maadm 1362780 Aug 15 22:02 COMAINS.dat.ftpd.201208152203*
-rwxr-xr-x 1 etd maadm 0 Aug 15 22:02 COMAINS.DONE.ftpd.201208152203*