Ich habe ein Problem mit initialisierten Werten. Ich habe ein Skript, das Verfahren hat:
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;
}
}
}
Wie Sie sehen können, habe ich dort und initialisiert zwei Werte $columns
und $rows
. Aber, wenn ich das Skript bis Unix laufen erhalte ich:
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
gleichen Fehler aufweist.
Diese Fehler sagen, dass ich Variable $columns
nicht initialisiert habe, aber ich tat es. Kann mir jemand erklären und versuchen, dieses Problem zu lösen?
Was ist Linie 73? (Ich nehme an, Sie haben es nicht gezeigt, weil Sie '$ columns' in einer Zeichenkette nirgends in Ihrem Snippet verwenden) – ThisSuitIsBlackNot
Ich lese die Konsolengröße und schreibe sie in' $ columns' und '$ rows' Variablen. Sie sind Zahlen, hoffe ich, keine Strings. Unter Windows funktioniert alles einwandfrei und ich bekomme keine Fehler. – allocer
Sie überprüfen nicht, ob $ columns definiert ist, nachdem Sie es zugewiesen haben. – stevesliva