• ベストアンサー

perlの構文について、読み方を教えて下さい。(1)

はじめまして、perl初心者です。基礎を勉強した段階ですが1人でやっていてわからない文章に行き当たりました。どうしてもわからないのでどうか先輩の皆さまにお教え頂きたくお願い申し上げます。いくつかあるので今後もどうか愛想をつかさずに御付合い下さい。では、以下に理解の出来ない文章を書きます。 if($tag eq "meta"and $attr->{"http-equiv"}eq "refresh"){ my ($delay,$url)=split";URL=",$attr->{content},2; $attr->{content}="$delay;URL=".$self->encode($url); ●my @attribs=map{"$_=\"$attr->{$_}\""}@$attrseq; $new_text="<$tag @attribs>";} ●の行が特にわかりません。$_は何を指すのでしょうか、$attrseq->@の要素になるのですか?$_を書くのはどうしてなのか教えて下さい。全行の解釈も書いて下さい。それと入力する時に\の半角のがキーボードで出ないのですがどうやったらよいのでしょうか。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

$_ は文字列を入力した時などに指定がないと代入される特殊変数です。で、「map {...} リスト」の形式の場合は {...} の中で $_ にリストが一つづつ入って順番に処理されて新たなリストが作られます。で、単純にすると分かり易いと思いますが、たとえば my @a = (1, 2); というリストがあったとして、この内容に 1 加えた @b とういリストを作りたいとします。このとき my @b; for (@a) {  push(@b, $_ + 1); } と書いてもできますが、 map を使ってこう書くことも出来ます。 my @b = map { $_ + 1 } @a; 結果は同じ。$b[0] が 2 になって $b[1] が 3 になります。 バックスラッシュ(\)の半角(文字コード 0x5c)については歴史的な事情により日本向けOSでは半角の円マーク(¥の幅が半分のやつ)で画面に表示されることがあります。(この歴史については書くと長くなるので省略します。知りたければ別途質問されればいいと思います)。 ということで\の半角の変わりに¥の半角で試してみてください。一般的な日本語キーボードならキーボードの右上の方にあります。

windws
質問者

お礼

有難う御座いました。説明も理解しやすいご説明だったので初心者としては気分的にも前向きになれるご解答でした。質問してよかったなと思いました。

windws
質問者

補足

有難う御座います。解りやすい説明だったのでとてもよくわかりました。それともう一つお聞きしたいのですが。●行の最初の$_は必要なのですか?$_=が無いと意味が無くなるものなのですか?宜しくお願います。

その他の回答 (1)

回答No.2

必要かどうかはともかく、あるのとないのとでは結果が違います。今回の場合はタグの属性値として用いるようなので、必要なのではないでしょうか。 最初の$_は、@attribsに追加される文字列のイコールの左側の部分として利用されています。例えば、 <img src="hoge.jpg"> というタグが生成されていたとして、$_を消すと、 <img ="hoge.jpg"> と言う出力が得られるはずです。

windws
質問者

お礼

ありがとう御座いました。11th_styleさんには他の質問でもお世話になり大変心強く思いました。内容もシンプルな例えで解りやすかったと思いました。有難う御座いました。