0
#array 

@myfiles = ("public", "A0", "B0", "KS"); 

今、私はA0、B0だけが必要で、パブリックやKSなどの他の要素は必要ありません. そのため、以下のコードがあります。

my @MYFILES; 

foreach $names ( @myfiles )  {

  next if ( $names =~ m/public/);
  next if ( $names =~ m/KS/ ) ; 
  push (@MYFILES, "$names");

}  

さて、次のifステートメントは、新しい配列「@MYFILES」に不要な要素をスキップするのに役立ちます

しかし、次の if ステートメントの代わりに、public、KS などの必須でな​​い要素のリストを作成し、それを foreach ループで呼び出して、A0、B0 などの必要な要素のみを収集する場合、どうすればよいでしょうか? つまり :

ハッシュを作成するようなもの %bad_dir = ( public = 1, KS = 1 ); 次に、以下のように foreach ループで呼び出します。

%bad_dir = ( public = 1, KS = 1 );

foreach $names ( @myfiles ) { 

 next if ( exists ( $bad_dirs{$names} )); 
 #but this code does not work ( Reason for creating hash is I will be having many such files that I don't need and I want to use next if statements. I want some shorter way. ) 

}

どうやってやるの。

ありがとう、

4

3 に答える 3

7

perldoc -f grepはリストのフィルタリングに便利です:

use warnings;
use strict;

my @myfiles = ("public", "A0", "B0", "KS");
my %bads    = map { $_ => 1 } qw(public KS);
my @MYFILES = grep { not exists $bads{$_} } @myfiles;
于 2013-08-16T00:02:06.250 に答える
1

grep をチェックしてください: http://perldoc.perl.org/functions/grep.html

短いリストがある場合は、これを行うことができます(もちろん、独自の正しい正規表現を使用して):

my @myfiles = grep { !/public|KS/ } @myfiles;
于 2013-08-15T23:30:46.507 に答える