シングルクォート、ダブルクォートの使用方法と法則性について

このQ&Aのポイント
  • Perlでのシングルクォートとダブルクォートの使い分けについて説明します。シングルクォートは文字列としてそのまま出力され、変数やエスケープ文字は評価されません。一方、ダブルクォートは変数やエスケープ文字を評価して展開します。数字の場合はダブルクォートで囲む必要はありませんが、文字列の場合はダブルクォートで囲む必要があります。また、print文などでの表示させる文字列は、シングルクォートやダブルクォートのどちらでも囲むことができます。
  • 以下の例では、シングルクォートとダブルクォートの使い分けや展開の仕組みを説明しています。まず、数字の場合はダブルクォートで囲まずとも展開されます。しかし、文字列の場合はダブルクォートで囲む必要があります。また、print文などでの表示させる文字列は、シングルクォートやダブルクォートのどちらでも囲むことができます。
  • シングルクォートとダブルクォートの使い分けについては基本的にはシングルクォートで囲むことが推奨されます。文字列内に変数などがある場合はダブルクォートを使用し、それ以外の場合はシングルクォートを使用することで、可読性が向上します。ただし、特殊な場合やパフォーマンスの問題などを考慮しながら使い分けることも重要です。
回答を見る
  • ベストアンサー

シングルクォート、ダブルクォート使用方法

初心者で勉強中です。 相当素人な質問なんですがよろしくお願いします。 Perlで使われる、シングル、ダブルクォートの自分の認識なのですが ・ダブルクォートは変数やエスケープ文字を評価してくれる。 ・シングルはそのまま文字列として出力される。 ということだと思っているのですがただ、『print』の後の表示させる文字列、数字などがシングルで囲まれていたりダブルだったり、またどちらも使わない場合などあるのですがこの使い分けはどのようにすれば良いかわかりません。 単に文字列の場合でもダブルクォートで囲っていたりと・・・ 以下の例ですと use strict; print "Content-type: text/html\n\n"; my $hensu = 1; print $hensu."<br>\n"; $hensu = "moji"; print "$hensu"; 上記をブラウザ出力すると 1 moji となるということなのですが、数字であればダブルクォートで囲まなくても展開されるということでしょうか?また後ろの2行の $hensu = "moji"; print "$hensu"; とは、どちらもダブルクォートで囲む必要があるのでしょうか。 法則性についてどなたか分かるかた、おしえていだだけますでしょうか。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

ダブルクォーテーションは展開あり。 シングルクォーテーションは展開なし。 と言う違いがあるので、 $hensu = "moji"; は、 $hensu = 'moji'; でも問題ありません。 print "$hensu"; は、 print '$hensu'; とすると、別の意味になります。具体的には、$hensu の内容が表示されるのではなく、$nunsu と言う文字列が表示されます。 個人的には、展開が必要な場合のみダブルクォーテーションを利用し、それ以外の時はシングルクォーテーションを利用する様にしています。

taka1992
質問者

お礼

ありがとうございました。 分かったのですがまだ、どうもよく分からないことが多いです。 新しい内容を掲載させてもらっています。 よろしければご確認していただけるととてもありがたいです・・・ あつかましいですがよろしければお願いいたします。

関連するQ&A

  • HTMLは、シングルクォートかダブルクォートか?

    HTMLで、<img src="images/spr2002.gif" width=130 height=130 border=0 alt="写真"> などクォート文字列がよくでてきますが、文法的にはシングルクォートかダブルクォートのどちらでもOKなのでしょうか? 大抵のHTMLエディタではダブルクォートを採用している事が多いようですが、私的には、PerlやPHPのprint文などでクォート文字列をエスケープする必要がないので、シングルクォートが良いような気がするのですが、みなさん、どちらが望ましいと思われますか?

    • ベストアンサー
    • HTML
  • perlのシングルクォートとダブルクォートの置き換えについて

    perlのシングルクォートとダブルクォートの置き換えについて お世話になります。 現在、perlにて開発を行っているのですが、一つ問題に当たってしまいました。問題になっているのは、文字列を扱う部分です。perlにおいて文字列はシングルクォートに囲まれたものと、ダブルクォートに囲まれたものがあると思うのですが、この両者の違いは、内部に書かれた変数等を展開するか否かだったと思います。 実は開発の途中でこのシングルクォートで囲まれた文字列を、ダブルクォートに囲まれた文字列に変更しなければいけなくなりました。つまり $test = 'aaa';  を  $test = "aaa"; としたいのです。これってperlの仕様的に可能なのでしょうか? かなり悩んだのですが、どうしてもわかりませんでした。 ちなみに、なぜこの処理が必要なのかというと、HPの製作をしているのですが、設置したフォームからその内容を得るというプログラムを書いた際に、そのフォームの内容がシングルクォートでしか得られないからです。シングルだとそののちの処理に影響が出てしまうのです。 だれかご存じないでしょうか。よろしくおねがいします。

    • ベストアンサー
    • Perl
  • ダブルクォート、シングルクォート、\について

    こんにちは。 PHPでメールフォームを作ったのですが、2つ問題点があります。 1.テキストフィールドにダブルクォートで文字を囲んで送信すると入力された情報が返されず、何も入力されていないメールが送られてきます。 2.シングルクォート、\をいれると前に\がついてしまいます。(こんなカンジ→\'\\)フォームはHTMLで作成しています。確認画面のフォームにstripcslashes($_POST[name])をかけておりブラウザ上だとシングルクォートと\は除去されているのですが、メールだと除去されてません。 ダブルクォート、シングルクォート、\が付いた文字列をPHP・HTMLにどのように記述すれば、メールにきちんと送られるようになるのでしょうか?

    • 締切済み
    • PHP
  • 文字列中のシングルクォートにエスケープシーケンスは必要?

    C言語でダブルクォートで囲まれた文字列内で使われる、「\」で始まるエスケープシーケンスがありますよね。例えば、 「\n」 ⇒ 改行 「\t」 ⇒ タブ 「\"」 ⇒ ダブルクォート 「\\」 ⇒ バックスラッシュ などですが、C言語のリフェレンスを見ると「\'」(シングルクォート)や「\?」(クエスチョンマーク)なども載っていました。でもこれらの文字は、実際はエスケープシーケンスを使わなくても、ちゃんとコンパイルされ表示もされます。 「'」や「?」をC言語の文字列内で使うには、公式には「\」が必要なんでしょうか?

  • concat関数内でのシングルクォートの使用

    シングルクォートを文字列として扱いたいのですが、 うまくいきません。 どなたかご存知ないでしょうか? concat('ここ''aaaaa','ここ');     ↓ 'aaaaa' のようにしたいのです。

    • 締切済み
    • XML
  • 文字列にシングルクォート

    stripslashes()で¥マークを取り除いた後 文字列にシングルクォートや " , / \ などがあった場合 \マークをつけてDBにアップしたいのですが、どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • parse_ini_fileでダブルクォートを含む値

    parse_ini_fileで読取る設定ファイルでは、 ダブルクォートを含む値を用いることはできないのでしょうか。 ダブルクォートを含んだ値を記述したかったのですが、 設定ファイルのパースエラーになるか、途中で値が切れてしまいました。 以下を試しました。 (PHP 5.0.4 です。) <テストコード> <?php print_r(parse_ini_file("test.ini")); ?> <設定ファイル test.ini の内容> (ダブルクォートを含む) key=val"ue --> 値がvalになる (ダブルクォートをエスケープ) key=val\"ue -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートをエスケープ) key="val\"ue" -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートを二連化) key="val""ue" -->パースエラーが発生し、値がvalになる (全体をシングルクォートで囲む) key='val"ue' -->値が'valになる マニュアルで以下の文が気になったのですが・・。 ( http://jp.php.net/manual/ja/function.parse-ini-file.php ) ----- 引用 ここから ----- 次の文字 {}|&~![()" は、キーで使ってはいけません。 また、値の中で特別な意味を持ちます。 ----- 引用 ここまで ----- ダブルクォートが「値の中で特別な意味」を持つ文字として 指定されていますが、具体的にどのような意味を持つのか分かりませんでした。 ですが、キーとしては禁止されているものの、値に含まれる文字としては禁止されていないようだったので・・。 どなたか詳しい情報ご存知の方いましたらご教授ください。

    • ベストアンサー
    • PHP
  • Perlで変数中のエスケープされた特殊文字を展開

    Perlで、変数に既に格納されているエスケープされた特殊文字を、もとの文字に展開するには どのようにしたらよいでしょうか。 つまり、\t という値で格納されているのをタブ文字にしたり、\\ という値であれば\の一文字に するという事です。 ダブルクォートで定義すれば展開されると思いましたが、展開は変数の代入時に行われるだけで、 既に変数中にエスケープされて入っているものはダブルクォートを使い変数を囲んだりしても展開されません。 下記は簡単な例でやろうとしてる事を示したものです。 add変数に\tというタブを意味するエスケープされた特殊文字を含んでいるとして、その\tを タブとして展開し、abc defのようにさせたいのですが、abc\tdefと入ってしまいます。 $ cat unescape.pl #!/bin/perl $add = '\tdef'; #シングルクォートで代入すると、もちろんエスケープされたまま代入される #$add = "\tdef"; #ダブルクォートで代入すると代入時にタブへ展開される #$add = $ARGV[0]; #本当はAGRVからエスケープ特殊文字を含んだ文字列を取りたい。ARGVから代入すると、シングルクォートの時のようにそのまま代入される $tgt = 'abc'; print "add: " . $add , "\n"; print "before: " . $tgt . "\n"; $tgt .= "$add"; #既にエスケープされた形で代入されているものを、ダブルクォートで囲んで使っても展開されない print "after: " . $tgt . "\n"; $ perl unescape.pl add: \tdef before: abc after: abc\tdef

    • ベストアンサー
    • Perl
  • ExelのVBAでダブルクォートをセルに埋めるには?

    文字列の中にダブルクォートを入れるにはどうするのでしょうか? C言語であれば、\" と書くところですが。 ダブルクォートを2つ続けると、Exel上で見ると期待どおりに表示されますが、 テキスト形式に保存してからファイルをみると、ダブルクォート2つ入ってます。 エクセルでデータベース管理をし、VBAでそれを編集して、 HTMLを自動生成するようなツールを作成したいのですが、 ダブルクォートをテキストに吐き出せなくて困っています。

  • ExelのVBAでダブルクォートをセルに埋めるには?

    文字列の中にダブルクォートを入れるにはどうするのでしょうか? C言語であれば、\" と書くところですが。 Range("A1") = "<img src=""" & DataName & "."">" 、のように、 ダブルクォートを2つ続けると、Exel上で見ると期待どおりに表示されますが、 テキスト形式に保存してからファイルをみると、ダブルクォート2つ入ってます。 エクセルでデータベース管理をし、VBAでそれを編集して、 HTMLを自動生成するようなツールを作成したいのですが、 ダブルクォートをテキストに吐き出せなくて困っています。

専門家に質問してみよう