2016-04-03 13 views
0

私はPerlについてほとんど識字していないので、限られた時間に巨大なスクリプトをデバッグする必要があります。私はちょうど以下の言葉の説明が必要でした。perlの条件文

if (exists $Rows{bypassFile} && $Rows{bypassFile} =~ /\w/). 

$Rowsは、配列変数であると私は$Rows{bypassFile} =~ /\w/を理解することができませんでした'bypassFile' => ''

としてbypassFileが初期化されます。 インターネットで見つけたのは:=~は「一致」演算子です。 \wは、1文字を表す正規表現です。

+1

あなたのニーズが緊急で緊急であれば、お手伝いをすることを検討してください。 –

+0

Re "*' $ Rows'は配列変数で、bypassFileは ''bypassFile' => ''' * "として初期化されます。これは意味をなさないものです。まず、 '$ Rows'は配列変数ではありません。それはスカラーです。次に、 ''bypassFile' => '''は何も初期化しません。 – ikegami

答えて

5

%Rowsは、ハッシュテーブル(連想配列、辞書)です。 $Rowsは、無関係なスカラ変数です。

キーに関連付けられた値bypassFileに「単語文字」、つまり文字または数字が含まれている場合、一致が真を返します。 existsテストでは、一致していない値についての警告を防ぐテストがあります。

Cf.例:

#!/usr/bin/perl 
use warnings; 
use strict; 

my %Rows; 

sub show_result { 
    if (exists $Rows{bypassFile} && $Rows{bypassFile} =~ /\w/) { 
     print "Yes\n"; 
    } else { 
     print "No\n"; 
    } 
} 

show_result(); 
$Rows{bypassFile} = ''; 
show_result(); 
$Rows{bypassFile} = ' ,'; 
show_result(); 
$Rows{bypassFile} = 'a12'; 
show_result(); 
+0

例と説明に感謝します。私はスクリプトの詳細を理解することができました。問題は解決していないようですので、質問を更新しました。 – user3055262

+2

別の質問がある場合は、新しい質問を作成してください。質問を変更するのは混乱します。混乱のためにお詫び申し上げます。 – choroba

+0

新しい質問を投稿します。私はあなたの指示に感謝します。 – user3055262

1

実際、%Rowsはハッシュであり、そして$Rows{bypassFile}このハッシュのエントリです。 ifbypassFileキーが%Rowsハッシュに存在するかどうかをテストし、そのキーの値に「単語文字」が含まれているかどうかをテストします。

+0

チョロバの説明を精緻化していただきありがとうございます:)私はスクリプトの詳細を理解することができました。質問を更新しました。 – user3055262