在这个例子中保留END
块是否可以,因为没有人想要一个坏的终端,或者我不应该把END
块放在模块中?在模块中放置一个END块是否不合理?
package My_Package;
use warnings;
use strict;
use Term::ReadKey;
sub _init_scr {
my ($arg) = @_;
$arg->{backup_flush} = $|;
$| = 1;
Term::ReadKey::ReadMode 'ultra-raw';
}
sub _end_win {
my ($arg) = @_;
print "\n\r";
Term::ReadKey::ReadMode 'restore';
$| = $arg->{backup_flush};
}
END {
Term::ReadKey::ReadMode 'restore';
}
sub my_function {
my $arg = {};
_init_scr($arg);
while (1) {
my $c = ReadKey 0;
if (! defined $c) {
_end_win($arg);
warn "EOT";
return;
}
next if $c eq "\e";
given ($c) {
when ($c ge 'a' && $c le 'z') {
print $c;
$arg->{string} .= $c;
}
when ($c eq "\cC") {
_end_win($arg);
print STDERR "^C";
kill('INT', $$);
return;
}
when ($c eq "\r") {
_end_win($arg);
return $arg->{string};
}
}
}
}
也许* ikegami *可以提供一个明确的答案,但我没有看到任何伤害添加一个'结束'块.. – 2013-05-09 12:20:10