我有一个在提示符下输入的变量:
my $name = <>;
我想在此附加一个固定的字符串'_one'
(在一个单独的变量中)。
E.g。如果$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";
这些都没有产生我想要的结果,所以我必须遗漏一些与输入格式如何从提示格式相关的内容。赞赏的想法!
答案 0 :(得分:25)
您的问题与字符串追加无关:当您读取一行(例如,通过<>
)时,该字符串中的记录输入分隔符包含;这通常是换行符\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"