3

perl の新しいタスク (これまで使用したことがありません)。ばかげているように聞こえますが、助けてください。

RestrictedNames という名前の変数は、制限されたユーザー名のリストを保持します。SplitNames は、ユーザー名の完全なセットを保持する配列変数です。ここで、instr を使用するように、RestrictedNames 変数に現在の名前が含まれているかどうかを確認する必要があります。

@SplitNames = ("naag algates","arvind singh","abhay avasti","luv singh","new algates") そして今、「singh」、「algates」などを持つすべての姓をブロックしたい.

@SplitNames = ("naag algates","arvind singh","abhay avasti","luv singh","new algates")
$RestrictedNames="tiwary singh algates n2 n3 n4 n5 n6";
for(my $i=0;$i<@SplitNames;$i++)
{
    if($RestrictedNames =~ m/^$SplitNames[$i]/ ) //google'd this condition, still fails
    {
          print "$SplitNames[$i] is a restricted person";
    }
}

解決に向けてご協力をお願いします。これがすでに尋ねられている場合は、許してそのリンクを共有してください。

4

4 に答える 4

6

次の行を変更する必要があります。

if($RestrictedNames =~ m/^$SplitNames[$i]/ )

if($RestrictedNames =~ m/$SplitNames[$i]/ )

^最初から一致するものを探します。

perlメタ文字の詳細については、こちらを参照してください

編集:名前 に基づいてブロックする必要がある場合は、forループ本体でこのコードを試してください。

my @tokens = split(' ', $SplitNames[$i]); # splits name on basis of spaces
my $surname = $tokens[$#tokens]; # takes the last token
if($RestrictedNames =~ m/$surname/ )
{
      print "$SplitNames[$i] is a restricted person\n";
}
于 2012-05-25T07:35:34.667 に答える
5

制限された名前の文字列を処理しようとしないでください。配列を処理してください。

次に、スマートマッチ演算子~~または2つのチルダ文字)を使用して、特定の文字列が含まれているかどうかを確認します。

#!/usr/bin/perl
use v5.12;
use strict;
use warnings;

my $RestrictedNames="n1 n2 n3 n4 n5 n6 n7 n8 n9";
my @restricted_names = split " ", $RestrictedNames;
say "You can't have foo" if 'foo' ~~ @restricted_names;
say "You can't have bar" if 'bar' ~~ @restricted_names;
say "You can't have n1" if 'n1' ~~ @restricted_names;
say "You can't have n1a" if 'n1a' ~~ @restricted_names;
于 2012-05-25T07:37:03.027 に答える
3

ハッシュスライスを使用して以下のようなことを試してください:

my @users =  ( "n10", "n12", "n13", "n4", "n5" );
my @r_users = ( "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" ) ;
my %check;
@check{@r_users}  = ();
foreach my $user ( @users ) {
   if ( exists $check{$user} ) {
      print"Restricted User: $user  \n";
   }
}
于 2012-05-25T07:49:17.970 に答える