Perl的新手并且想知道为什么我的代码没有做它应该做的事情

时间:2014-05-01 06:57:15

标签: string perl input

我有一项任务要求我为该字符串中的每个字符打印一个字符串的x次迭代。因此,如果字符串输入为"Gum",则应打印出来:

Gum  
Gum  
Gum

现在我的代码是

my $string = <>;
my $length = length($string);
print ($string x $length, "\n");

我的口红印刷了五次作为我的输出。

4 个答案:

答案 0 :(得分:7)

由于您只是使用输入字符串,它最后仍包含换行符。这也算作一个角色。在我的系统上,它输出4 Gum\n

chomp($string)将删除行结尾,但输出也会一起运行,从而导致GumGumGum\n

答案 1 :(得分:7)

那些说过你会在Windows系统的最后得到CR + LF的人是错误的。 Perl会将原生行结尾转换为任何平台上的简单换行符\n

无论您是在阅读终端还是从文件中阅读,都必须牢记这一点。

内置chomp函数将从字符串变量的末尾删除行终止符。如果字符串没有以行终止符结束,则它将无效。

因此,当您键入 G u m 输入时,您将$string设置为{{ 1}},"Gum\n"将显示它有四个字符。

您在屏幕上看到五次次,因为第一行是您自己键入的内容。该计划印刷了以下四种。

length之后,chomp只有$string,长度为三个字符,这就是您想要的。

要在单独的行上输出,您必须在每行之后打印换行符,以便编写

"Gum"

或者

my $string = <>;
chomp $string;
my $length = length $string;
print ("$string\n" x $length);

我希望有帮助

答案 2 :(得分:0)

您的代码运行正常。请参阅:http://ideone.com/AsPFh3

可能性1:可能是您在从命令行提供输入时放置2个空格,这就是为什么长度为5,并打印5倍。这样的事情:http://ideone.com/fsvnrd

在上述情况下,my $string=<>;会为您my $string = "gum ";,因此长度为5。

可能性2: 另一种可能性是,如果你使用Windows,那么它将在字符串的末尾添加回车符(\r)和新行(由于输入\n)。因此它的长度为5.

修改:要在新行中打印:请使用以下代码。

#!/usr/bin/perl
# your code goes here
chomp(my $string=<>);
my $length = length($string);
print ("$string\n" x $length);

Demo

修改2 :要删除\r\n,请使用以下内容:

$string=~ s/\r|\n//g;了解详情here

答案 3 :(得分:0)

当您插入输入并在之后按Enter键时,您不会输入&#34; Gum&#34;但是&#34;口香糖\ r \ n&#34;这是一个长度为5的字符串。你应该修剪。