お世話になります。
真になる演算子が1を、偽になる演算子がundefを返すことを研究しています。
print "3 == 3:【", 3 == 3, "】\n";
であれば、3 = 3が1を返すので
3 = 3:【1】
となります。
print "3 > 4:【", 3 > 4, "】\n";
であれば、3 > 4がundefになるので
3 > 3:【】
になります。
さて、and 演算子を使ったところも見たいと重い、
print "3 == 3 and 3 > 4:【", 3 = 3 and 3 > 4, "】\n";
と書いて実行すると
Useless use of a constant in void context at C:\Perl\perl\showAndTF.pl line 8.
という警告と共に
3 == 3 and 3 > 4:【1
と出力されてしまいます。
これはなぜでしょうか。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
多分、and の優先順位が , よりも低いせいだと思う。
この回答への補足
上のTacosanさんの回答と合わせで納得しました。
http://perldoc.jp/docs/perl/perlop.pod
に演算子の結合順位が出ていますね。
私が書いた式の場合、,よりandの結合順位が低いので、andの前後で式が分断してしまうんですね。
どうもありがとうございました!
おお、なるほどですね!
ううーん、まだバッチリは分かりませんが、ありがとうございます!
引き続き何かありましたらよろしくお願いします!
No.4
- 回答日時:
Perl が持っている論理演算子は, もともと (C に由来する) &&, || などのみでした. リストを作る演算子 , はこれらより優先順位が低いので, 例えば
print "3 == 3 && 3 > 4:【", 3 = 3 && 3 > 4, "】\n";
は
print "3 == 3 && 3 > 4:【", (3 = 3 && 3 > 4), "】\n";
という解釈をします.
ところが, 論理演算子を制御構造として使おうとするとこの動作は不都合です. 例えば, #2 のように「open できなかったら~」というのを表そうと
open my $fh, "<" , $file || die croak("Cannot open $file");
としちゃうと
open my $fh, "<" , ($file || die croak("Cannot open $file"));
を意味するけど, これは明らかに期待した動作じゃない.
で, このようなときのために「演算子 , よりさらに優先順位が低い論理演算子」として and や or などが導入されたんです.
No.2
- 回答日時:
>そうではなくて、3 = 3でリストは打ち切られてしまうということですね?
>それがなぜか知りたいのです。
なぜかって・・・演算子とか関数の優先順位を考えましょう
open my $fh, "<" , $file die croak("Cannot open $file");
なんかと同じです.
一般に関数の引数が優先順位が高いのと
引数の終端をどうやってみつけるかという話です
もし,期待通りにしたいのであれば
print "3 == 3 and 3 > 4:【", (3 == 3 and 3 > 4), "】\n";
です.
No.1
- 回答日時:
>真になる演算子が1を、偽になる演算子がundefを返すことを研究しています。
何をやってるのかさっぱりわからんけど・・・
ついでにいうと,Perlのバージョンも明記せんとだめ
5.10.0だとぜんぜん違うエラーになるし
表示もちがうから
Perlの場合
print ってのが
実はリストを受け取る「関数」だということを知ってますか?
>print "3 == 3 and 3 > 4:【", 3 = 3 and 3 > 4, "】\n";
ってのは
print ("3 == 3 and 3 > 4:【", 3 = 3) and 3 > 4, "】\n";
と同じでしょうね.
ついでにいうと,3=3 の段階で,既に問題があるから
Can't modify constant item in scalar assignment
がでるかも
ご回答ありがとうございます。
すみません。間違えました。
×print "3 == 3 and 3 > 4:【", 3 = 3 and 3 > 4, "】\n";
○print "3 == 3 and 3 > 4:【", 3 == 3 and 3 > 4, "】\n";
です。
おっしゃるとおりprint関数の第一引数に
"3 == 3 and 3 > 4:【"
という文字列を、第二引数に
3 = 3 and 3 > 4
という論理式を、第三引数に
"】\n"
という文字列を渡そうとしています。
結果として
3 == 3 and 3 > 4:【】
という結果を得たいと思っていました。
(【と】の間は偽になるので)
そうではなくて、3 = 3でリストは打ち切られてしまうということですね?
それがなぜか知りたいのです。
Perl は5.8.8です。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- 英語 The majority of currently available reviews focus 8 2022/08/07 05:55
- 英語 This paper focuses on the literature relevant to t 2 2022/12/02 09:41
- 英語 The Twilight Zone1959に関するCBSの回答について 1 2023/03/02 15:13
- YouTube youtubeからの著作権メールについて 2 2023/02/14 16:12
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- 英語 和訳の手伝いをお願いします 2 2023/02/27 11:42
- 英語 Greater stress was reported in axial direction at 1 2022/07/20 12:46
- TOEFL・TOEIC・英語検定 英検準1級英作文の添削をお願いします。 ポイントはCurriculumとGlobalizationを 4 2023/05/29 11:33
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
window.open でのファイル指定方法
-
MATLABのm-fileについて
-
Firefox で file:// で始まる U...
-
PerlでのUseless use...
-
巨大なテキストの最終行を取得...
-
VBA テキストファイルを読み取...
-
python renameについて
-
ロックファイルの自動削除
-
perl ファイルが開かない
-
VBAでCSVファイルの特定行を書...
-
awkスクリプトでダブルクォーテ...
-
close()で例外が投げられる理由
-
VBAでCSVファイルを途中行まで...
-
エクセルVBA コードが同じでも...
-
perlのcdについて
-
ディレクトリ名を取得したい
-
PerlからのCSV出力
-
バッチファイルの作り方(CSV→...
-
fopenでディレクトリ内の全ファ...
-
Perl cgiの文字化けを直したい ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.open でのファイル指定方法
-
python renameについて
-
csvファイルの横方向への改行に...
-
fgets で値が取得できない
-
drtファイルはどうしたら開...
-
VBA テキストファイルを読み取...
-
MATLABのm-fileについて
-
巨大なテキストの最終行を取得...
-
JSP URLに表示される拡張子 .jsp
-
行を指定して削除する方法PERL
-
ファイルの存在の有無を確かめ...
-
fortranのopen文について。
-
MySQLにバイナリデータを正常に...
-
AutoNts
-
Firefox で file:// で始まる U...
-
フォルダ内のファイルを全て開...
-
WindowsでPerlをする際,1行目の...
-
コマンドライン引数で正規表現...
-
XML::Parserの parsefileの結果...
-
perl ファイルが開かない
おすすめ情報