2011-07-24 12 views
2

私のprevious questionで、私はエンコードの問題について尋ねました。open pragma。 @daxim's answerに基づいて私の心に別の質問が来る。utf8オープンプラグマ(またはファイルハンドルの変換)を検出するにはどうすればよいですか?

use open qw(:std :utf8); 
  • これは、上記のopen pragmaを使用して良い方法はありますか?私がCPANパッケージよりも確実にできないのは、何らかのIOを望まないからです。open pragmaがそれらを妨害します。

サブ質問は:

  • やや検出可能であり、どのようなプラグマは、指定されたストリームのために有効ですか?たとえば:open(:std :utf8)プラグマでSTDOUTが開かれているよりも幾分検出可能ですか?
  • より広義には、(既に開いている)ファイルハンドルにどのような変換/(またはエンコード)が適用されるのかを検出することは可能ですか? (もしそうなら、二重のエンコーディングを取得していないことを確認することが可能である。)

シモンズ:私はtchrit's famous answerから多くを学んだが、まだ十分ではないようです。 ;(

答えて

3

あなたはファイルハンドルに割り当てられた層を検出するために、PerlIO::get_layersを使用することができます。

use open qw(:std :utf8); 
open my $in, '<', 'somefile' or die "$!" 
my @layers = PerlIO::get_layers($in);  # ("unix", "crlf", "utf8") 
+0

ありがとうRTFM http://perldoc.perl.org/PerlIO.htmlが必要です:)! – jm666

関連する問題