0

ファイルを読み取って、配列内の最初の空白行に遭遇するまで $path で始まる行を保存しようとしています。以下のコードがありますが、行ではなくパス名のみを出力します。誰か見てくれませんか。

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 のままです...その後、左側の式が再び true と評価されるまで、再び false になります。

# 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 に答える