質問

次のPerlコードには明らかな非効率性があります。

while (<>)
{
if ($ARGV =~ /\d+\.\d+\.\d+/) {next;}
... or do something useful
}

コードは、不要なファイルのすべての行をステップスルーします。

この特定のスクリプトが実行されているファイルのサイズについては、顕著な違いをもたらすことはほとんどありませんが、学習のためです。ファイル全体をジャンクするにはどうすればよいですか&lt;&gt;動作していて次のものに移動しますか?

この目的は、このスクリプトを実行するサーバーが、ファイル名にバージョン番号を持つアプリの古いバージョンを保存するためです。現在のバージョンにのみ興味があります。

役に立ちましたか?

解決

最初にgrep ARGV。

@ARGV = grep { 

最初にgrep ARGV。

<*> !~ /\d+\.\d+\.\d+/ } @ARGV; while (<>) { # do something with the other files }

他のヒント

Paul Roubのソリューションは、ファイルの読み取りを開始する前に @ARGV をフィルター処理できる場合に最適です。

繰り返しを開始した後にファイルをスキップする必要がある場合、

while (<>) {
    if (/# Skip the rest of this file/) {
        close ARGV;
        next;
    }
    print "$ARGV: 

Paul Roubのソリューションは、ファイルの読み取りを開始する前に @ARGV をフィルター処理できる場合に最適です。

繰り返しを開始した後にファイルをスキップする必要がある場合、

<*>"; }

ポールルーブの回答詳細については、 perlop manページのIO演算子セクションを参照してください。 。 grepの使用パターンと、&lt;&gt;に関連する他のいくつかの事項について説明します。

ARGVの言及に注意してください。 :readonly のようなものに関して:

perl dangerous.pl 'rm -rfv *|'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top