comment éviter l'Utilisation de la valeur non initialisée dans la concaténation (.) ? en perl v5.8.4

$ perl -e 'use warnings;my ($a,$b);$c=$a.$b;print $c'
Use of uninitialized value in concatenation (.) or string at -e line 1.
Use of uninitialized value in concatenation (.) or string at -e line 1.

Je vois que

J'ai décidé qu'il

use 5.8.4;
use strict;
use warnings;
use Test::More tests => 2;
my ( $start, $end, $sysid, $ver, $tradetype );
( $start, $end ) = ( 1, 10 );
my $test = make_string( $start, $end, $sysid, $ver, $tradetype );
is( $test, "1,10,,,\n", "make index string" );
is( make_string( 0, 0, 0, 0, 0, ), "0,0,0,0,0\n", "test number" );

sub make_string {
    my @input      = @_;
    my @input_init = map { !defined $_ ? '' : $_ } @input;
    my $rezult     = join q{,}, @input_init;
    return $rezult . "\n";
}

j'ai décidé à cette question, mais je voulais savoir comment ce problème peut être résolu en d'autres personnes

  • Vous voyez quoi? ("Je vois que" n'est pas terminée dans ce contexte.) Vous avez décidé quoi? Vous n'avez pas initialisé $sysid, $ver et $tradetype avant l'appel à make_string(). Pensez-vous vraiment que la mise à niveau, par exemple, Perl 5.14.1 (vous êtes trois principaux rejets actuels). (FWIW: votre code de test fonctionne correctement avec 5.10.0 et 5.14.1 sur mon Mac. Je n'ai pas de Perl 5.8.x compilé sur elle.)
  • le deuxième exemple fonctionne. dans sub make_string il initialise avec l'opérateur ternaire avec la carte. Mais je ne comprends toujours pas sa question. Je suppose que c'est quelque chose à propos de thi 1er exemple.
  • C'est probablement parce qu'il n'a pas à poser une question.
  • "Je vois que l'. Je l'ai décidé." Tellement vrai. Tellement vrai.
  • Donc...euh...vous avez eu un problème avec votre premier exemple, et votre deuxième exemple il fixe. Droit, et quel est le problème? Les deux exemples qui n'ont rien à voir les uns avec les autres.
InformationsquelleAutor | 2011-11-16