• ベストアンサー

perl ヒア文(print <<"EOM" ~ EOM)が正常に表示されない

ヒア文を使って文字を出力させたいのですが、うまく行きません。 失敗例 $name ="test"; print <<"EOM"; $nameAC EOM どうも、$nameAC = ""と解釈しているようです。 その代わり、 $name ="test"; print <<"EOM"; $name AC EOM と書くと、できます。 何とか、英語の文字と続けて出力させたいのですができないものでしょうか? 宜しくお願い致します。 また、こういった知識をどこから学ばれたのか教えていただければ幸いです。 私の持っている本では見つけることができませんでした。 宜しくお願い致します。

  • CGI
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • __orz
  • ベストアンサー率44% (12/27)
回答No.1

$name ="test"; print <<"EOM"; ${name}AC EOM としたらどうでしょうか? こういう部分ってよくわからなくて歯痒いですよね。 私は適当に試して見つけたりしています。。

ayaka19801201
質問者

お礼

非常にすばやい回答いただきありがとうございます!! 早速試してみますね! 本当に、歯痒いですよ。 こういったことが、しっかりと載っている書籍が欲しいものです。 >これから回答頂ける方へ これ以外にも方法がありましたらぜひお願いします。 またこれを、どうやって見つけたのかも教えてください。 宜しくお願い致します。

その他の回答 (1)

  • t140
  • ベストアンサー率39% (59/150)
回答No.2

#1以外の方法だと、\文字でエスケープぐらいかな。 わたしはラクダ本ぐらいしか見てないのでラクダ本に載っ てると思います。 $name ="test"; print <<"EOM"; $name\AC EOM

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 こんな、書き方もあるのですね。 また、ラクダ本ですか。 書店で見かけて気にはなっていたのですが、 なんだか敷居が高そうなので見ていませんでした。 今度、書店に行ったときに見てみます。 ありがとうございました。

関連するQ&A

  • print文で「

    いつもお世話になっております。 早速ではありますが、 タイトル通り、print文で「""(ダブルクォーテーション)」を出力させたいです。 例えば、 open(OUT, ">>TEST.txt"); print OUT "123:456:789\n"; close(OUT); とある時、「456」だけに「""(ダブルクォーテーション)」をつけて「"456"」として出力・・・、 つまり、TEST.txt の最後の行に、 123:"456":789 と出力させるにはどうしたらよいでしょうか。 サーバー・・・HP-UX CGI開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perl print文で日本語表示するには

    perlのプログラムで use utf8が宣言されていない時(test1.pl)は、 print文で日本語が正しく表示されるのですが、 use utf8が宣言されている時(test2.pl)は、 print文で日本語が正しく表示されないかエラーになります。 encode('utf-8', $string)やencode('cp932', $string) も試してみましたがうまくいきませんでした。 どのようにすればよいでしょうか。 ---test1.pl------------------------------------------------ #!C:/perl/bin/perl use strict; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; print $string; ----------------------------------------------------------- 実行結果 OK 2018年12月26日 9時36分6秒 ----------------------------------------------------------- ---test2.pl------------------------------------------------ #!C:/perl/bin/perl use strict; use utf8; use Encode; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; print $string; #print encode('utf-8', $string); #print encode('cp932', $string); --------------------------------------------------- 実行結果 NG (PC1 Windows7 ActivePerl) Wide character in print at D:\test\test2.pl line 11. Global symbol "$year年" requires explicit package name (did you forget to declare "my $year年"?) at D:\test\test2.pl line 8. Global symbol "$mon月" requires explicit package name (did you forget to declare "my $mon月"?) at D:\test\test2.pl line 8. Global symbol "$mday日" requires explicit package name (did you forget to declare "my $mday日"?) at D:\test\test2.pl line 8. Global symbol "$hour時" requires explicit package name (did you forget to declare "my $hour時"?) at D:\test\test2.pl line 8. Global symbol "$min分" requires explicit package name (did you forget to declare "my $min分"?) at D:\test\test2.pl line 8. Global symbol "$sec秒" requires explicit package name (did you forget to declare "my $sec秒"?) at D:\test\test2.pl line 8. Execution of D:\test\test2.pl aborted due to compilation errors. ----------------------------------------------------- 実行結果 NG (PC2 Windows7 ActivePerl) Malformed UTF-8 character (unexpected continuation byte 0x94, with no precedingstart byte) at C:\test\test2.pl line 8. (略) Malformed UTF-8 character (unexpected continuation byte 0x95, with no precedingstart byte) at C:\test\test2.pl line 8. 2018 N12 26 9 5 4 b ----------------------------------------------------- 期待している実行結果 2018年12月26日 9時36分6秒 ----------------------------------------------------- よろしくお願いします。

    • ベストアンサー
    • Perl
  • foreachで一致した説明文を表示(初心

    この間ポケモン図鑑について質問させていただいた者です。(ID違いますけど^^; http://oshiete1.goo.ne.jp/kotaeru.php3?q=1649007 変な質問をしてるかもしれませんm(_ _)m @list内には 手持ち・・(略)<>あくしゅう<> ほのお・こお・・<>あついしぼう<> 戦頭に出ると・・<>あめふらし<> このように1つ目に説明文、2つ目に(特性の)名前が入っています。 それを、 foreach(@list){ ($content,$name)=split(/<>/); } こんな感じでスカラー変数に代入してるのですが、 各ポケモンのデータを表示するページで説明文を表示するにはどうすればいいのでしょうか? 「$end_tokuse」というスカラー変数にあらかじめ各ポケモンの特性の名前は入っていて、それを上の処理と一致するか、しないかでこんな感じで print <<EOM; <table><tr><td> EOM ここに上の処理を print <<EOM; </td></tr></table> EOM 持って来て表示させようかと思っていたのですが、表示するデータの量がほかにもたくさんありすぎていちいち切っていると 編集が大変面倒になるので、一致した説明文をスカラー変数に代入して print <<EOM; <table><tr><td> $setume </td></tr></table> EOM このようにしたいのですが、どうすればいいかわかりません。 一致した説明文をスカラー変数に代入して表示させるにはどうすればいいですか。 わかりにくいですがよろしくお願いします。

    • ベストアンサー
    • Perl
  • print文で&(半角)文字のエラーを解消するには

    よろしくお願いいたします。 Perlのprint文で、&(半角の&)文字を含む 文字列を、テキストファイルに出力しようとすると、 ”undeclared entity[Ln: 37, Col: 22]” という、その&文字の箇所で、 エラーが出て、強制終了されてしまい、 そこまで(途中まで)しか、テキストファイルに出力されません。 どうすれば、Perlで、 &(半角の&)文字を含む文字列を、 テキストファイルに出力出来るようになるのかを 教えてください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • SQL SELECT文について

    SQL、データベース関連の領域で、SELECT文の構文を学習しています。 WHEREの後の条件に使われる式として、以下の記載があるのですが、 具体例として、SELECT文があっての説明が無いので、式の意味、SELECT文 に、どのような形で出てきて、どのように解釈したらいいかの知識を習得出来 ません。御教授下さいますよう、御願い申し上げます。 LIKE"_野菜%" (意味) "野菜"を含む文字列。_は一文字、%は任意文字数のワイルドカード 宜しくお願い致します。

  • クオートの多重入れ子をするには?

    print文でhtmlを出力するCGIをperlでプログラムしているのですが、 クオートの入れ子がうまくいきません。(3重入れ子) print "<td><input type=button value='ログイン' onclick='action="./test.cgi";submit();'></td>\n"; ヒア文字列を使って print <<"A"; <td><input type=button value='ログイン' onclick="action='./test.cgi';submit();"></td>\n A とすればうまくいくのですが、ヒア文字列を使わずに簡素に書く方法は無いでしょうか? よろしくお願いします。m(__)m

    • ベストアンサー
    • CGI
  • sendmailの$bodyの中にwhile文

    php 初心者です sendmailでメール配信文を作っています。 配信はできたのですが、発信者の「発信しました」通知メールに 配信リストを掲載して送信したいと思っています。 そこでmb_send_mailの$bodyの中にwhile文を書こうと思って下記のように書いてみたのですが 当然ながら動きません。 下記のように$body = <<<EOM  EOM;の中にwhile文を書けるのでしょうか? 書けるとしたらどのように書いたら宜しいのでしょうか? またはどのようにしたらwhile文で取得する配信リストをメールの中に入れることができますか? ご教授よろしくお願い致します。 $body = <<<EOM while ($i = mysql_fetch_array( $result)) { echo $i['name']; ;} EOM;

    • ベストアンサー
    • PHP
  • ドコモでechoやprint部分が表示されない

    現在、携帯サイトをPHPで作成しています。 まだ初心者なので簡単なサイトですが、ログインしてポイントをためたり、消費したりするものです。 そこで問題なのが、ドコモの携帯でechoやprintなどの文字出力が出来ません。 ちなみに他社携帯では問題なく普通に見ることが出来ます。 各キャリアごとにDOCTYPE宣言を変更したり、.htaccessに AddHandler server-parsed html AddType application/xhtml+xml .html AddType application/xhtml+xml .xhtm .xhtml をつけ足したりしたのですが出来ませんでした。 echo部分は ようこそ<? echo "$name" ?>さん!<br /> のような形になっています。 $nameには $name="テスト";みたいな形で名前が入っています。 もうどうしたらいいのか全くわからないので、 どなたか解かる方、教えていただけないでしょうか?

    • 締切済み
    • PHP
  • "print"と"echo"の違いを教えてください

    PHPを始めた初心者なのですが、"print"と"echo"の使い道の違いがよく解りません。 調べてはみましたが、"print"は『文字列を出力する』、"echo"は『1つ以上の文字列を出力する』と書いてあり、意味が良く解りませんでした。 どなたか、ご存知でしたらご指導宜しくお願い致します。

    • 締切済み
    • PHP
  • Perlでのテキスト処理について

    Perlでのテキスト処理について質問です。 テキストファイルの中身が下記のようになっています。 【テキスト編集前】 --------------------------------------- test ,abc ,AB ,VI ,SS ,ma ---1行目 test ,abc ,AC ,PI ,VS ,ma ---2行目 test ,abc ,BA ,SS ,VS ,ma ---3行目 test ,abc ,BA ,VI ,VS ,ma ---4行目 test ,cde ,AA ,VI ,SS ,mb ---5行目 test ,cde ,CC ,PE ,VS ,mb ---6行目 test ,cde ,BC ,PI ,SS ,mb ---7行目 test ,cde ,AC ,PI ,SS ,mc ---8行目 --------------------------------------- 2列目(abc/cde)と6列目(ma/mb/mc)が同じ行に対しては 1行にまとめて出力したいと思っています。 この時、1列目、4列目、5列目はマージした形にし (同一文字は一度だけ出力、同一でない文字は/区切りで出力)、 2列目、6列目は同一文字をそのまま出力し、 3列目に関しては、該当する行の先頭行の文字列を 出力したいと思っています。 下記が当方の希望しているPerl実行後の出力結果です。 【テキスト編集後】 --------------------------------------- test ,abc ,AB ,VI/PI/SS ,SS/VS ,ma test ,cde ,AA ,VI/PE/PI ,SS/VS ,mb test ,cde ,AC ,PI ,SS ,mc --------------------------------------- このような編集をPerlで実行したいと思っているのですが、 どのような記述をすれば実行できるのか教えて頂けないでしょうか。 当方、Perlを始めたばかりで基本的なことを 伺っているのかもしれませんが すみませんが、ご了承ください。 宜しくお願いいたします。

専門家に質問してみよう