Search code examples
stringperlappend

Appending a string variable to a fixed string in Perl


I have a variable that is entered at a prompt:

my $name = <>;

I want to append a fixed string '_one'to this (in a separate variable).

E.g. if $name = Smith then it becomes 'Smith_one'

I have tried several various ways which do not give me the right results, such as:

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

^ The _one appears on the next line when I print it out and when I use it, the _one is not included at all.

Also:

my $one = $name."_one";

^ The '_one' appears at the beginning of the string.

And:

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

None of these produce the result I want, so I must be missing something related to how the input is formatted from the prompt, perhaps. Ideas appreciated!


Solution

  • Your problem is unrelated to string appending: When you read a line (e.g. via <>), then the record input separator is included in that string; this is usually a newline \n. To remove the newline, chomp the variable:

        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"
    

    To interpolate a variable into a string, you usually don't need the ${name} syntax you used. These lines will all append _one to your string and create a new string:

        "${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.
    

    And this will append _one to your string and still store it in $name:

        $name .= "_one"