10

次の Perl コードは明らかに非効率的です。

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

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

この特定のスクリプトが実行されているファイルのサイズでは、これが顕著な違いをもたらす可能性は低いですが、学習のためです。<> が動作しているファイル全体をジャンクして、次のファイルに移動するにはどうすればよいですか?

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

4

3 に答える 3

15

grepARGVを最初に。

@ARGV = grep { $_ !~ /\d+\.\d+\.\d+/ } @ARGV;

while (<>)
{
  # do something with the other files
}
于 2009-09-14T15:57:25.513 に答える