- ベストアンサー
Perl: ファイルハンドルをスカラー変数にすると変
- Perlのファイルハンドルで、昔はINやOUTやFILEのようにベアワード(裸のワード)を使っていたと思います。
- IN、OUTがグローバル名になってしまい、他のモジュールと衝突することがあるということで、myつきのスカラー変数にした方が良いと言われました。
- printの後ろに来るのは出力する文字列ではなくファイルハンドルだと、正しく判断してもらえるもっと美しい書き方はあるのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
残念ながら print $out $_; でがまんしてください.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
どのくらいの大きさのプログラムで, どんなことをしたいんですか? それによって「どう書けばいいか」は変わってきますよ. 例えば, ここに挙がっているくらいのことなら, 私はファイルのオープンなどしません. 標準入力から読み込んで標準出力に書き出すようにします. そうすれば, 「美しい書き方」なんかで悩まなくってすむ.
お礼
ありがとうございます。 ううん、「そもそも何をしたいんですか」というのは、コンピューターの世界で頭がいい人が頭が悪い人をやりこめるときに使う典型的な表現ですね。。 それだと、頭が悪い人は言い返せなくなってしまいますが、「本当に聞きたかったこと」は聞けなくて、モヤモヤした気持ちが残ることになりませんか。 分かっておられるとおり、まさか、このコードの作例をそのまま使おうとは思いません。 もしそうであれば、私はそもそもプログラミングなどせず、UNIXであればcat、Windowsであればtypeを使います。 私は、最近のベストプラクティスとして、ファイルハンドルにベアワードを使わず、スカラー変数を使うということを聞きかじって、でも暗黙的な$_と併用すると問題が起きるな、と一般的に思っただけです。 推奨される書き方をして、$_がむき出しになるのは異様に思えたので、何か私が見落としている、勘違いしているのであれば、それを聞きたいと思ったんです。 そうではない、ということですね。 「美しい書き方」なんかで悩むのは、そもそも意味がない、ということでしょうか。 そうであれば確かに私はそうは思っていませんでした。 いずれにせよ、ありがとうございます。
補足
ううーん、ちょっとお礼で不必要に八つ当たりしていますね・・・。 申し訳ありません。 私の考えでは、Perlには「文脈を読んで、ファイルハンドルが渡されたときはファイルハンドルが渡されたと察して欲しい」と思います。
お礼
なんと!そうなのですか。 ううーん、それだと open OUT '>', 'out.txt'; ~ print OUT; の方が美しいような。。 ありがとうございます。
補足
もしかして、$_も流行らないんでしょうかねェ。。 #! /bin/perl # # fh_scalar.pl use strict; use warnings; open my $in, '<', 'in.txt'; open my $out, '>', 'out.txt'; while (my $str = <$in>) { print $out $str; } close $in; close $out; とか? ううん、ぼくの知ってるあの簡潔なPerlじゃないような・・・・・・ やっぱりINとOUTで生きて生きたいんですけど、たとえば発表会とかでそう書いていると笑われるレベルなんでしょうかねぇ~~