0

我正在尝试读取文件并保存以 $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;
        }
}
4

2 回答 2

1

触发器操作员..可以挽救生命……我们的代码。在左边的表达式返回 true 之前,它保持为 false,并且在右边的表达式变为 true 之前保持为 true ......然后它再次为 false,直到左边的表达式再次计算为 true。

# read lines into $_ for cleaner code
while (<INFO>) {
    if (/$path/ .. /^$/) {
       push @array1, $_;
    }
}
print @array1;

哦,还有关于路径的说明……我知道没有一个操作系统真的需要反斜杠,甚至 Windows 也没有……使用普通的斜杠/可以让你免于奇怪的转义序列和其他潜伏在黑暗中的魔法

于 2012-08-17T08:56:15.170 回答
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*
于 2012-08-17T09:02:31.863 回答