2016-12-12 5 views
0

初期化された値に問題があります。あなたが見ることができるように

sub compare_with_terminal { 
    use Term::Size::Any qw(chars pixels); 
    my $columns = 0; 
    my $rows = 0; 
    ($columns, $rows) = chars *STDOUT{IO}; 

    print "Columns: ".$columns."\n"; #line 73 
    print "Rows: ". $rows."\n"; 

    if($height > $columns || $width > $rows){ 
     print "Bigger than terminal: "; 
     my $option = <>; 
     chomp($option); 
     if($option eq "N"){ 
      print "End."; 
      exit 0; 
     } 
    } 
} 

、私はそこに作成した2つの値$columns$rowsを初期化:私はメソッドを持っているスクリプトがあります。私はUnixのまで、このスクリプトを実行するときには、私が手:

Use of uninitialized value $columns in concatenation (.) or string at ./perl/script.pl line 73 (#1) (W uninitialized) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables.

$rowsは同じエラーを持っています。

これらのエラーは、私が変数$columnsを初期化しなかったと言いますが、私はそうしました。誰でも私を説明し、この問題を解決しようとすることができますか?引数なしcharを使用して

+0

What's line 73? (あなたがスニペットのどこでも文字列に '$ columns'を使わないので、あなたはそれを見せていないと思っています) – ThisSuitIsBlackNot

+0

コンソールのサイズを読み、' $ columns'と '$ rows'変数に書きます。彼らは私が望む数字であり、弦ではありません。窓ではすべてうまく動作し、私はエラーを取得しません。 – allocer

+0

$ columnsが割り当てられた後、$ columnsが定義されているかどうかはチェックしません。 – stevesliva

答えて

4

There is a bug report for Term::Size::Any

のLinux(Term::Size::Anyバージョン0.002)に私のための値を返します。

use warnings; 
use strict; 

use Term::Size::Any qw(chars); 
my ($columns, $rows) = chars(); 
print "$columns $rows\n"; 

__END__ 

80 24 

あなたは0に$列を初期化していますが、chars関数を呼び出すときは、上書きされ。

+0

それはokと思われる。私はWindows上でそれをテストし、すべて正常に動作します。まもなく私はUnixでそれをチェックします。 – allocer

+0

注: 'chars()'は 'chars(* STDIN)'と同じですので、代わりに 'chars(* STDOUT)'を使用しているはずです。 – ikegami

関連する問題