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

あなたの問題は文字列の追加とは関係ありません。行を読み取ると(たとえば、を介して<>)、レコード入力セパレーターがその文字列に含まれます。これは通常改行\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 に答える