12

我有一个在提示符下输入的变量:

my $name = <>;

我想为此附加一个固定字符串'_one'(在一个单独的变量中)。

例如,如果$name = Smith它变成'Smith_one'

我尝试了几种不同的方法,但都没有给我正确的结果,例如:

my $one = "${name}_one";

^_one当我打印出来时出现在下一行,当我使用它时,_one 根本不包括在内。

还:

my $one = $name."_one";

^'_one'出现在字符串的开头

和:

my $end = '_one';
my $one = $name.$end;
or 
my $one = "$name$end";

这些都没有产生我想要的结果,所以我可能错过了一些与提示中的输入格式有关的东西。想法赞赏!

4

1 回答 1

28

您的问题与字符串附加无关:当您读取一行(例如 via <>)时,记录输入分隔符包含在该字符串中;这通常是换行符\n。要删除换行符,chomp变量:

    my $name = <STDIN>; # better use explicit filehandle unless you know what you are doing
    # now $name eq "Smith\n"
    chomp $name;
    # now $name eq "Smith"

要将变量插入字符串,通常不需要${name}使用的语法。这些行都将附加_one到您的字符串并创建一个新字符串:

    "${name}_one"  # what you used
    "$name\_one"   # _ must be escaped, else the variable $name_one would be interpolated
    $name . "_one"
    sprintf "%s_one", $name
    # etc.

这将附加_one到您的字符串并仍将其存储在$name

    $name .= "_one"
于 2012-09-17T12:49:14.397 回答