• ベストアンサー

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さんには他の質問でもお世話になり大変心強く思いました。内容もシンプルな例えで解りやすかったと思いました。有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 携帯端末だけでしか見れないCGI探しています

    はじめまして。例えばメタで飛ばす方法<meta http-equiv="refresh" content="0; URL=****">ではなくCGIで携帯HPをWEBで見れない ようにできるCGIをご存知の方教えて頂けますでしょうか? 宜しくお願いします。

  • 他のページに自動でジャンプするには

    <meta http-equiv="Refresh" content="*; URL=../index.html"> これで指定する方法は調べました。 <meta>以外ではできないのでしょうか。 (body内でのタグでの指定は無理でしょうか) 外部ファイルでの指定が可能でしたら、できれば書き方を教えていただきたいです。 よろしくお願いします。

  • phpについてお聞きしたいです

    ============================ <?php if(!is_array($data)){ ?> <meta http-equiv="refresh" content="0;URL=./error.html" /> <?php } ?> ============================ 上記の意味をわかる方がいれば教えて下さい!

    • 締切済み
    • PHP
  • 他のページへの転送

    HTMLなんですが… <Meta http-equiv="refresh" content="0;url=index.html"> で、PCの場合他のページに転送をしますが、携帯でもこのタグを作用させるにはどうしたらいいですか?

  • フレームページでの自動ジャンプ

    フレームページでA.htmlとB.htmlがあるんですが 自動的に他ページへ飛ばすタグ <META HTTP-EQUIV="refresh" CONTENT="3;URL=http://..."> がありますよね? 自動的へ飛ばすのをフレーム内B.htmlが切り替わるっていう風には できないでしょうか? ---現在--- <html> <head> <title>フレーム</title> <META HTTP-EQUIV="refresh" CONTENT="10;URL=http://..."> </head> <frameset rows="20%,*" frameborder="no"> <Frame name="A" src="A.html"> <Frame name="B" src="B.html"> </frameset> </html> ------ こうなってるんですができませんか? よろしくお願いします。

  • metaタグでリダイレクト

    掲示板を新しいURLに作ったのですが、リンクが古いものになっています。 そこで、XXXXX.cgi という掲示板にアクセスしたら、自動的に、YYYY.cgi という掲示板にジャンプするようなことはできないでしょうか?HTMLなら、<meta http-equiv="refresh" content="0;url=./index.html">のようにできるのですが。

  • 最短で自動ジャンプする方法

    あるページから、別のページへ最短で自動ジャンプする方法について質問させていただきます。 METAタグの方法は知っていますので、 <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://www.***.co.jp/***.html"> と記述していますが、これよりも短い時間で飛ばす方法と言うのはあるのでしょうか? METAタグまたはそれ以外でもかまいません。 どうぞご教授ください。よろしくお願いします。

  • リアルタイム更新

    よく、株価やチャットなどでリアルタイムに更新されていると 思いますが、その方法を知りたいのですが・・・。 html内に <META HTTP-EQUIV="refresh" CONTENT="3; URL=abc.html"> と言う方法ではないやり方でお願いします。 おそらく更新がなかったら、while文で何も更新しないとかを繰り返しているのかな?とか考えていますが、いまいち考え方がわかりません。 アドバイスお願いします。

    • 締切済み
    • PHP
  • URL指定のないHTTP-EQUIV="Refresh"

    稀に以下の様なページが出る事があるのですが、 これはどういう原因で起こるのでしょうか? <HTML> <HEAD> <META HTTP-EQUIV="Refresh" CONTENT="0.1"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1"> </HEAD> </HTML> 0.1秒毎にキャッシュ消しながらリフレッシュ、という意味だと思うのですが、サーバー攻撃みたいな事になっていて困っています。

  • php文でユーザー認証後自動的にページジャンプするには?

    phpでユーザー認証後、自動的に設定したurlにジャンプ したいのですが? echo "<meta http-equiv='refresh' content='2;URL=http://www.***..htm/'>"; を使用すると、反応はするんですがページにジャンプできません。 認証後、自動的にジャンプする方法を教えてください。