为什么'chop'不适用于<stdin>?</stdin>

时间:2012-11-01 19:23:45

标签: perl

当我尝试从用户那里获取输入时,我试图找出为什么chop功能对我不起作用:

my $string = <STDIN>;
my $chr = chop($string);
print "String: $string\n";
print "Char: $chr\n";

输出

perl chop.pl
hello
String: hello
Char:

但如果我使用字符串,那么它可以工作!

my $string = "frong";
my $chr = chop($string);
print "String: $string\n";
print "Char: $chr\n";

输出 [583]

perl chop.pl
String: fron
Char: g

4 个答案:

答案 0 :(得分:4)

当您从控制台传递输入时,chop正在切断字符串末尾的newline,当您点击Enter时会出现该字符串。虽然你的字符串不包含它。

答案 1 :(得分:0)

你是什么()是字符串末尾的换行符。从STDIN分配时删除换行符:

chomp(my $string = <STDIN>);

换句话说,您的程序应如下所示:

chomp(my $string = <STDIN>);
my $chr = chop($string);
print "String: $string\n";
print "Char: $chr\n";

答案 2 :(得分:0)

检查这两个函数chopchomp的perl文档可能就是这样。

chomp

  

chomp这个更安全的“chop”版本删除了任何尾随字符串               对应于$ /的当前值(也称为               “英语”模块中的$ INPUT_RECORD_SEPARATOR。

chop

  

chop砍掉字符串的最后一个字符并返回               字符切碎。

希望这个帮助

答案 3 :(得分:0)

如果您打印诊断程序以显示可变内容,请在它们周围放置某种形式的分隔符,然后在$ chr示例中看到换行符。

例如

print "String: \"$string\"\n";
print "Char: \"$chr\"\n";