• ベストアンサー

直前のワードとの間にスペースをはさむとは??

パールの学習をしています 今回も毎度のようにどうでもよいレベルの質問ですが気になってしようがないので誰か教えてください 今読んでるのはプログラミングPerlという750ページもある辞書みたいに分厚い本です^^ これによると 2.3.2.2 文字列リテラル の項目中に次の解説文があります シングルクォート文字列は、直前のワードとの間にスペースをはさむ必要があることに注意しよう。 なぜなら、シングルクォートは、識別子に使うことができる有効な文字(しかし、使わないほうが良い)だからだ。 ということはダブルクォート文字列なら直前のワードとの間にスペースをはさむ必要がないということだと認識したのです これを確認するために次のコードを実行しました $_ = "a""b"; すなわち2つのダブルクォート文字列を、間にスペースをはさまずに使用してみたのです しかし、これはエラーになってしまいました ですので私はシングルクォート文字列だろうがダブルクォート文字列だろうが直前のワードとの間には必ずスペースをはさまないとダメなのではと思い、 パールハッカーの方々から回答をもらいに、ここへ参ったのです この本を読み進めていけば、いずれ謎は解けるでしょうが、とにかく分厚い本なので・・・

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

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

こんにちは >シングルクォート文字列は、直前のワードとの間にスペースをはさむ必要があることに注意しよう。 「ああやっぱりスペース必要」というサンプルなんですが... funcという関数にfooという引数を渡す文を4種類考えてみました sub func {print $_[0]}; func "foo"; func"foo"; func 'foo'; func'foo'; #NG このうち4番目の書式だけがエラーとなります。 >なぜなら、シングルクォートは、識別子に使うことができる有効な文字(しかし、使わないほうが良い)だからだ。 このあたりは、「パッケージ」の章にかかれてるはずです。 パッケージデリミタには「::」のほか、「'」も使えるってことです

zyousuke
質問者

お礼

moon_piyoさん、ご回答ありがとうございます。 教えていただいたコードを試しました。 func"foo"; を実行しても何らエラーが出ませんでした! パールは、こんな書き方もできるのですね! パッケージの章は5章ですので、まだまだ先ですね~ ここへたどり着くには あのパールの全組み込み関数が掲載してある3章をクリアしないとダメなので遠い道のりです^^ というわけで また何日もしない間に、他愛のない質問をしにくる可能性が高いですが その時も、また教えてくださいね! 私は些細なことが気になりだすと先に進めなくなるという厄介な悪霊に取り付かれているので・・・^^;

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

#1の方の回答にある通りなんですが蛇足ながら。 Perl4までは、パッケージに属する変数やサブルーチンの名前を パッケージを明示して記述するには パッケージ名'変数名 のように、間にシングルクォートを挟んで行っていました。 Perl5になり、C++のように :: を使うようになりましたが、 それまでのスクリプトが問題なく動くように、シングルクォートによる 指定も許容しているのです。「使わない方が良い」というのは そういうこと(古いやり方)だということです。 また、「直前のワードとの間にスペースをはさむ必要がある」というのは このようなパッケージ変数の指示と混同されないようにするためです。 >$_ = "a""b"; これがエラーになるのは、Perlの構文上 ダブルクォートで囲まれた文字列 ダブルクォートで囲まれた文字列 というのが許されないからです(空白があって同じはず)。 しかし、Perlに入門するならいきなりプログラミングPerlではなく 初めてのPerlあたりの方が良かったと思いますが…(^^;

zyousuke
質問者

お礼

moon_piyoさん、ご返信ありがとうございます。 よし!また1人、ウィザードがパーティーに加わったぞ! この分厚いダンジョンを無事攻略できるように、今後とも手助けよろしくお願いします! パールをバージョンアップした際、稼動中のシステムがいきなり誤動作しないように、 以前までのやり方を許可しつつ、かつ今後は使わないように呼びかけているのですね。 風のうわさではパール6は完全なオブジェクト指向になるそうで・・・ 記述法がけっこう変わりそうな予感・・・ 私が質問文中に書いたコード $_ = "a""b"; は、そもそも構文が間違っていましたね。 これはしたり! そして初めてのPerlですが 実は、すでに読破済みでした・・・ さあ、これで私がパールをまだぜんぜん理解してないことがバレましたが、 ぜひぜひ今後ともお付き合いを!

zyousuke
質問者

補足

あ、やばい回答者の名前を間違えてしまった!! sakusaker7さん、どうか怒らないでください!!

関連するQ&A