web-dev-qa-db-fra.com

Ajouter une variable de chaîne à une chaîne fixe en Perl

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!

12
dgBP

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"
25
amon