J'ai une variable qui est entrée à une invite:
my $name = <>;
Je veux ajouter une chaîne fixe '_one'
à ceci (dans une variable distincte).
Par exemple. si $name = Smith
alors ça devient 'Smith_one'
J'ai essayé plusieurs façons qui ne me donnent pas les bons résultats, telles que:
my $one = "${name}_one";
^ Le _one
apparaît sur la ligne suivante lorsque je l'imprime et lorsque je l'utilise, le _one n'est pas du tout inclus.
Aussi:
my $one = $name."_one";
^ Le '_one'
apparaît au début de la chaîne.
Et:
my $end = '_one';
my $one = $name.$end;
or
my $one = "$name$end";
Aucun de ceux-ci ne produit le résultat que je veux, donc je dois peut-être manquer quelque chose lié à la façon dont l'entrée est formatée à partir de l'invite, peut-être. Idées appréciées!
Votre problème n'est pas lié à l'ajout de chaîne: lorsque vous lisez une ligne (par exemple via <>
), le séparateur d'entrée d'enregistrement est inclus dans cette chaîne; il s'agit généralement d'une nouvelle ligne \n
. Pour supprimer la nouvelle ligne, chomp
la 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"
Pour interpoler une variable dans une chaîne, vous n'avez généralement pas besoin du ${name}
syntaxe que vous avez utilisée. Ces lignes ajouteront toutes _one
à votre chaîne et créez une nouvelle chaîne:
"${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.
Et cela ajoutera _one
à votre chaîne et toujours le stocker dans $name
:
$name .= "_one"