1

Simon Cozens の Beginning Perl によると、\n は Windows の Perl でサイレント プリントを追加することになっています。これは、私が見つけたほとんどのスクリプトで当てはまります。ただし、私にはわからない理由により、Perl は次の例で \n を認識できません。どうやら括弧の使用法と関係があるようですが、違いを理解するための情報はあまり見つかりませんでした。

スクリプト1

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";

出力は

654321
       <--
c:\Users\Brenden\desktop\begperl

私にとって \n は Perl によって読み取られ、新しいスペースに導かれました。今

スクリプト2

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";
print reverse qw(1 2 3 4 5 6), "\n";

出力は

654321
      <--  
654321
C:Users\Brenden\Desktop\Begperl>

私には、2 つの「\n」引数があるため、2 つのスペースが必要です。1つしか見えません。

スクリプト3

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";
print "\n";

出力は

654321
      <--
      <--
C:\\Users\Brenden\Desktop\Begperl

2 つのスペースが作成されるため、Perl は 2 つのスペースを 1 つに絞りません。したがって、script2 で 2 つの「654321」の間に作成されたスペースは、最初の「\n」が原因で、2 番目の「\n」は無視された可能性があります。スクリプト 2 で 2 番目の「\n」が無視されない場合、出力は次のいずれかになります。

654321
      <-- 
654321
      <--
C:\\Users\Brenden\Desktop\Begperl 

また

654321
      <--
      <--
654321
C:\\Users\Brenden\Desktop\Begperl

ここで、2 番目の印刷にブラケットを追加するとします。

スクリプト4

#!usr/bin/perl
#ranges.pl
use warnings;
use strict;

print reverse (1 .. 6), "\n";
print reverse (qw(1 2 3 4 5 6)), "\n";

出力が表示されます

654321
654321
      <--
C:Users\Brenden\Desktop\Begperl>

この出力の最初の「\n」はどうなりますか?? 私への唯一の説明は、「654321」とスペース(順序に関係なく)を含む次のプリントアウトによってスペースが占有されることです。しかし、この説明は正しくないようです。私には、それが qw( 1 2 3 4 5 6 ) または (qw(1 2 3 4 5 6),"\n") が逆に渡されたかどうかにかかわらず、スクリプト 2,3,4 ではまだ 2 が表示されないはずです「\n」が反転しているかどうかに関係なく、スペースはありますか?

4

1 に答える 1

4

だからあなたはこれらが同じであることを知っています

print reverse (1 .. 6), "\n";
print reverse (qw(1 2 3 4 5 6)), "\n";

次に、そのうちの 1 つを変更しました。

print reverse (1 .. 6), "\n";
print reverse qw(1 2 3 4 5 6), "\n";  <--

では、お互いに同じ出力が得られなくなったことになぜ驚かれるのでしょうか?


reverseの引数を識別する括弧を削除すると、"\n"開始が に渡されreverseます。

次の 2 行はqw( 1 2 3 4 5 6 )、reverseの結果を渡します。

print reverse (qw(1 2 3 4 5 6)), "\n";
print(reverse(qw(1 2 3 4 5 6), "\n"));

次の 2 行はqw( 1 2 3 4 5 6 ), "\n"、reverseの結果を渡します。

print reverse qw(1 2 3 4 5 6), "\n";
print(reverse(qw(1 2 3 4 5 6), "\n"));

OPは、誤って注釈が付けられたスニペットで完全に質問を書き直しました。これが正しい注釈付き出力です。

script1 の出力"654321\n":

654321           <== "654321\n" newline one
                 <== prompt
C:\>             <== prompt

script2 の出力"654321\n\n654321":

654321           <== "654321\n" newline one
                 <== "\n"       newline two
654321           <== "654321" + prompt
C:\>             <== prompt

script3 の出力"654321\n\n":

654321           <== "654321\n" newline one
                 <== "\n"       newline two
                 <== prompt
C:\>             <== prompt

script4 から最初に予想される出力"654321\n\n654321\n":

654321           <== "654321\n" newline one
                 <== "\n"       newline two
654321           <== "654321\n" newline three
                 <== prompt
C:\>             <== prompt

script4 からの 2 番目に予想される出力"654321\n\n\n654321":

654321           <== "654321\n" newline one
                 <== "\n"       newline two
                 <== "\n"       newline three
654321           <== "654321" + prompt
C:\>             <== prompt

script4 の出力"654321\n654321\n":

654321           <== "654321\n" newline one
654321           <== "654321\n" newline two
                 <== prompt
C:\>             <== prompt
于 2013-02-14T23:20:31.077 に答える