![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ある書籍で、見つけました、perlのソースについて
疑問がありまして、お尋ねします。
※下記は、perl/cgiソースの一部です。
ある書籍で見つけたものです。
>require 'cgi-lib.pl';
>&ReadParse(¥%test);
私は、(%test)だと思っているのですが。
()の中の、先頭に「¥」を付けることに、どのような意味
があるのでしょうか
>$test = $test{'test'};
仮に、$testの値が「"<&>"」だったとしまして、以下
をごらん頂きたいのですが、
>open(ファイルハンドル,$fname)
>while(<ファイルハンドル>){
>$test =~ s/¥"/¥"¥;/g;
私の認識では、「s/"/"/g;」ではと思うのですが、
「¥」はどのような意味なのでしょうか
以下、3行も同じ疑問です。
>$test =~ s/&/\&testmp\;/g;
>$test =~ s/¥</¥<¥;/g;
>$test =~ s/¥>/¥>¥;/g;
>print $_;
>}
書籍で上記のソースを見たのですが、
HTMLのフォームのテキストボックスに、「"<&>"」と入力し
submitボタンで、上記コードを含む、cgiを開きます。
そして、「"<&>"」を受取っても正しく、置換し、
cgiから、HTML($fname)を開くプログラムです。
置換後のHTMLファイルには、「"<&>"」と表示されます。
以上、よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
他の人と同じ内容なんですが、正式名称で説明します。
\をPerlでは[バックスラッシュ](もしくは[逆スラッシュ])と呼びます。
円記号で表示されるのは、日本のWindowsのみで
特にプログラムでは不正確な表記です。
Perlの \[逆スラッシュ] には幾つかの違う意味があります。
[1]: メタ文字を定義する。
[2]: インタプリタへの命令文を通常の文字列として解釈させる。
[3]: リファレンスを抽出する。
これらはPerl文法の1番基本の部分の一つです。
[1]は誰もが(?)何気なく使っているであろう "\n" とかです。
改行文字でもなんでもないのに、メタ文字として解釈され、
内部で改行文字に置き返られます。
こーゆー勝手に違う文字や、違う概念として扱われる文字をメタ文字と言います。
[2]は、s/\"/\"\;/g; まさにこれです。
この例では、;[セミコロン] で文が終了されずに通常の文字列として解釈されます。
正規表現中は、通常の場合だと関数展開が行われないので、
& の前方に \ はいらないのですが、プログラムは人間が読む物なので、
関数展開しないと言う事を明示的に示すため、普通は \ を記入します。
[3]は、詳しく言っても分からない予感がするので、適当に説明します。
リファレンスはポインタ(アドレス)のようなものだと思ってください。
全てのデータは、アドレスを持ってます。
アドレスを「持ってる」と言より、アドレス上の「位置」にデータが存在します。
その位置情報(リファレンス)を取り出します。
/%test;
これは、%test が持っている実体の位置です。
どうゆうことかと言うと、変数は値を保有しているのではなく、
変数は実際のデータ位置を知っていて、自由にアクセスできると言うことです。
その位置(リファレンス)を変数に問い質して入手する時に \ を使います。
なお、そのデータ(リファレンス)にアクセスする時は [デリファレンス]と呼びます。
意味分からないと思いますが、今の段階では絶対分からないと思うのでスルーして下さい。
一応、これらは基本なんでどこにでも書いてあると思いますので、
知りたければ検索するとすぐ出てきます。
あと、今回みたいな疑問が沸いた時、とりあえずコンパイルしてみるといいです。
-cw で起動させると、実行なしのコンパイル、エラー内容が出力されます。
※なお、Perlは適当な書籍を買うと嘘だらけですので気をつけて下さい。
オライリーの本の場合は初心者には難しいかもしれませんが、とりあえず適当な表現と嘘はないです。
サイトだったらそこそこまともな所は多いです。
http://www14.atpages.jp/jelfe/
あと、実は付属のマニュアルが市販の本よりずっと性能いいです。
No.2
- 回答日時:
まず
&ReadParse(¥%test);
の \ は「リファレンス」を生成しています. サブルーチン ReadParse の中でハッシュ %test の内容を変更しているんじゃないでしょうかね.
あと,
$test =~ s/¥"/¥"¥;/g;
の 3個の \ のうち, 本当に必要なのは ; の前の 1つだけです. これは #1 が言われるように「文を終わらせる ; と区別するため」です. 他の 2つはなくても動作します.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- Java java final 1 2022/06/10 22:49
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
- HTML・CSS ブロックエディターで作りつつ、画像を挿入しつつ、画像にスタイルシートのコードを付ける方法はありますか 1 2022/08/23 18:46
- Excel(エクセル) Excelの置換が上手くいかない Microsoft® Excel® 2019 MSO (バージョン 5 2022/08/17 22:26
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- サーバー Windowsサーバでグループを検索したい 1 2023/04/17 15:30
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl 正規表現でエラー
-
perlでの括弧対応チェック
-
例外処理のフローチャートの記...
-
エクセルVBAでシートモジュール...
-
ユーザー定義関数に#NAME?が返...
-
モジュールとは何ですか
-
モジュールからフォームのボタ...
-
Excel VBAでリンク切れをチェッ...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
VBSがコンパイルエラーになりま...
-
use lib qw(変数名);は無理?
-
Form間の値の渡し方
-
Excel VBAで、ユーザーフォーム...
-
ユーザーフォームに最小化・最...
-
VBでグローバル変数を宣言するには
-
Clipmail3.0 確認画面の非表示...
-
エクセルのユーザー関数が小文字に
-
Tomcat マイナーバージョン移行...
-
初歩的な質問なのですが、サブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if等判定文での定数、変数の記...
-
型を調べる
-
perl 正規表現でエラー
-
perlのif文で・・・・・
-
perlのシングルクォートとダブ...
-
perlでの入れ子文字列削除
-
演算子と括弧
-
ある書籍で、見つけました、per...
-
msgboxに何故括弧がないの!
-
文字列比較
-
perl tr での変数の使い方
-
Perlでの改造方法
-
perlでの括弧対応チェック
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
おすすめ情報