Perl

Perl難かしい2

投稿日: 更新日:


Perl難かしいの続き。

ついに検索不能な「$_」の意味が分かりました。(^o^)丿
これ、特殊変数というものだったのです。
でも正体分かったけど、よくわからんない。

上のリンク先から引用
>デフォルトで入力やパターンマッチの対象になる特殊変数です。
(ノ*・ω・)ノ ワケヽ(・ω・*ヽ)ワカ ヽ(*・ω・)ノラン♪

なんとかよくわかんないながらも、掲示板を改造。
書き込みでリンクを設定した場合、(本文中にttpという文字列を書き込んだり)
正当な書き込みのチェックかどうかのルーチンへ遷移するようにはい。

書き込みなくても、広告が毎日書き込まれて削除が面倒だから、
これで広告が減るといいなあ。
コンピュータの自動書き込みなら多分、ブロックされると思うんだけど。
様子見ということで。

しかし……本文を取得するために、
周りのコード(AiremixのMireilleのcore.cgiより)を見つつこんなコード書いてしまったのですが
001 my
$body = ”; ←変数用意
002 my%item=($CF{‘ngWordsItems’}||‘body=本文’)=~/(\w+)=(\S+)/go;goってなんだろう検索できない。
↑$CFの連想配列で取得したものを、正規表現で区切って、ハッシュ変数に格納?ハッシュのキーと値は?
003 for(keys%item){ ←ハッシュ変数itemに、格納されている値の数だけ繰り返す?
004 $body = $IN{$_}; ←!?
005 }
自分で書いておいて何やっているかさっぱりヾ(´・ω・`)

だれか2行目から4行目まで、1行1行丁寧に教えてください。(^✹^)

Perl難かしい

投稿日: 更新日:


掲示板に宣伝がよく書き込まれるので、
ぷましゃまの掲示板みたいに、特定の単語が含まれなければ書き込めないみたいに改造しようと思ったのですが、
Perlが難しくて、難航中です。
JAGA GOGO 掲示板の方は、簡単に改造できたのですが。今回の「Mireille」は難しい。(>_<)

たとえばたとえばなのですが、

my$
hoge=$IN{$_};
↑これ $_ ってのがどういうことか分からない。
たしか$つけるとグローバル変数になるんでしたっけ。
でも、
$_がどこからきているのかぱっと見謎。というかまだ見つけてない。
あとあと、{ }これどういう意味だろう。文字使ってる部分もあったので連想配列かな。
と思って今調べてみたらハッシュ。当たり。

でも、$_の中身がよく分からないので、
うん。


continueがnext。breakがlastとか。
唐突に、@hoge&&last; っていう文章が入っていたり。
@
hoge&&last; これどういう意味だろう。
lastがbreakだとして、@
hogeってが@ついてるから配列変数?
今調べたら、これ配列の要素数っていう意味ってことが分かりました。
ということは、要素数&&break; みたいな文章。
これがfor文の中にあります。

もしかしてトリッキー?なソースコードなのかな。
Perlぜんぜん分からない自分としては、とてもカオスなことに。


$HOGE{‘test’} and !($PIYO{‘test’} =~ /^多分正規表現) or push(@abc,’***’);
これとか超難解です。(><)
○ and ○;
で完結しているというコード。
C言語で&&と同じ意味なのかな。左側でfalseなら右側を実行しないとか。
でも左側が見た感じ、真偽値にならないような気がするんですが。
右も、よくよくみると ○ or ○ になっていますね。
○ and (!(○ or ○));
まとめてみるとこんな感じに。
右側の!は、多分否定を表すのかな。でも真偽値が出たところで、
if文でもwhile文もでないんだから、必要ないような気がするのですが。
これも、迷宮入りということではい。


push(****)if@hoge;
あと最後にこれです。
pushはpushで1つの関数だと思うのですが、(リストに値を追加する関数)
その右側にセミコロン無しで、いきなりif文がきています。
といっても、if文の中身がないですが。

Perlの入門サイトとか見ても、乗ってないですし。
調べるにも、検索ワードが思いつかないです。

とにかく、NGワードの部分だけでもなんとか頑張って改造したいです。
Perl分かる方は、ぜひこっそり教えてください。(^o^)


後々調べたら、
Perlって後置形式のifとかがあるらしい。
if($a==1) {
$a = 2;
}

$a = 2 if($a==1);

ということは、④は、それを利用しているってことですね。
しかし、②と③がまだ分からない。

いや……もしかして②は、③で考えたように
@hoge&&last;
は次のようになるのかな。
if(hoge.length>0) { break; }

ということで、③もこれと同じ感覚で展開できそうなんですが、
!(否定)が入っている意味がどうしても分からないです。

myってのは、ローカル変数の宣言方法みたい。


③をよくみたら、
A and (!(B or C));
じゃなくて
A and (!B) or C;
でした。[´・ω・`]

ということは、展開すると次のような感じかな…。
a = A;
if(a==true) {
b = B;
if(b==false) {
C;
}
}

なんだか、「Perl難かしい」というより、
「トリッキーな?コード難しい」って感じですね。εミ(っ>_<)っ

Perl難かしい2 へ続く