2013-05-06 17 views
5

Sto provando a scrivere in un file un valore preso da un array. Ma sto avendo un errore '' Non è possibile utilizzare un variabili non definite come riferimento simbolo a ... Linea 81:non può utilizzare un valore non definito come simbolo perl

foreach $k (sort keys %{$value2}){ 
    print $value4 $k." = ".%{$value2{$k}}. $value3; 



sub printit{ 
    $value1 = $_[0];#"ipadress" is a string 
    $value2 = $_[1];#%hash2 
    $value3 = $_[3];#"paquet" is a string 
    $value4 = $_[4];#SOURCE is the file name 

    foreach $k (sort keys %{$value2}){ 
    print $value4 $k." = ".%{$value2{$k}}. $value3; 
    if (%{$value2{$k}} >= 2) { print $value4 "s";} 
    print $value4 "\n"; 
    } 
} 

printit('ipadress', \%hash2, ' paquet'. SOURCE); 

Qualcuno potrebbe me indicare cosa c'è di sbagliato?

le cose è il mio codice è questo e funziona bene. E non ho concatenato SOURCE e funziona ancora bene.

print SOURCE "Ipadress #2\n\n"; 
foreach $k (sort keys %hash2){ 
    print SOURCE $k." = ".$hash2{$k}." paquet"; 
    if ($hash2{$k} >= 2) { print SOURCE "s";} 
    print SOURCE "\n"; 
} 

ma sto avendo un sacco di codici che fa la stessa cosa e ho voluto creare una funzione di essere in grado di ridurre il numero di linee.

risposta

3

tuo dimenticato una virgola o concatenazione qui:

print $value4 $k." = ".%{$value2{$k}}. $value3; 

Perl pensa che si desidera utilizzare $value4 ha un filehandle (simbolo), ea quanto pare $value4 non è definito. Il motivo non è definito è perché si assegna il valore di $_[4] ma probabilmente si vuole $_[3]

Sembra che si intende $value4 essere un nome di file per l'output (dal array sono indicizzati-zero.); se questo è il caso, allora è necessario aprire effettivamente il file per ottenere un filehandle:

open my $fh, '>', $value4 or die "Could not open file $value4: $!"; 
... 
print { $fh } $k." = ".%{$value2{$k}}. $value3; 

in modo da avere tre cose da sistemare:

  1. capire perché $value4 non è definita e sistemare le cose. (Quando ti trovi ad aggiungere numeri ai nomi degli scalari, è probabile che tu voglia usare un array in ogni caso. Puoi usare solo @_ direttamente o prendere i valori in un array @args invece di un gruppo di scalari.)

  2. Capire come si desidera formattare la stringa di output e utilizzare un filehandle, non un nome file, per print.

  3. Capire come si desidera serializzare l'hash indicato da $value2{$k}, perché stampare un hash in contesto scalare non è quasi certamente ciò che si vuole fare.

(suggerimenti aggiornati dopo mi sono reso conto che stai manca un filehandle)

Problemi correlati