プロが教えるわが家の防犯対策術!

DBより値を読込み、評価しているようですが
前任者がいないので、どう評価しているかわかりません。

--------------------------------------------------
tie(%P3, DB_File, $P3_FILE, O_RDONLY, 0444, $DB_BTREE) || die "$P3_FILE: $!";

if (defined($p3 = $P3{$wd1, $wd2, $wd3})) {
・・・
}
--------------------------------------------------

これは、%P3に
$wd1か$wd2か$wd3が存在したら
それに対応する値を代入してから、処理を行うと
考えていいのでしょうか?

A 回答 (4件)

$P3{$wd1, $wd2, $wd3}


は、多次元配列をハッシュを用いて表現する古い書き方です。(Perl4で使われていたがPerl5でも使えます)
例えば、
$;=";";#説明の為に可読の文字にしただけで規定値は違います
としたとき
%data=("X;Y;Z", 123);
というハッシュがあれば(つまりキーが"X;Y;Z"、値が123ということ)
$data{"X","Y","Z"}というように指定して取り出せます。
なので、$wd1か$wd2か$wd3が存在したら
という意味ではありません。
    • good
    • 0
この回答へのお礼

連想配列はキーと値が1対1だと思っていました。
キーが複数存在する場合もあるのですね。
ありがとうございました。

お礼日時:2005/02/07 19:54

実際に、次のようにして試してみるといいです。


$code=ord $;;
printf "10進:%d,16進:%X",$code,$code;
    • good
    • 0
この回答へのお礼

ありがとうございました!
ようやく上手くマッチさせることが出来ました!

お礼日時:2005/02/09 17:03

#2補足>実際なんの文字コードになるかご存知ですか?


アスキーコードで0x1C (\034)です

参考URL:http://www.shibu.jp/cppreference/ascii.html
    • good
    • 0

>連想配列はキーと値が1対1だと思っていました。


>キーが複数存在する場合もあるのですね。
キーは1つです。
{}の中に,で区切った内容については、($;の値で)
連結して(1つの)キーになるのです。

この回答への補足

実は、上記のコードをCに落としているのですが
$;というのがカンマかと勘違いしていました。
これは実際なんの文字コードになるかご存知ですか?

補足日時:2005/02/08 23:41
    • good
    • 0
この回答へのお礼

なるほど、そういうことですか。
参考になりました。
ありがとうございます。

お礼日時:2005/02/08 16:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!