Il problema è che questo rendere stringa mediante le virgolette
converte a forza numeri e riferimenti in stringhe, anche quando non volete
che lo siano. Prendetela così: l'espansione con
le virgolette viene usata per produrre nuove stringhe. Se avete
già una stringa, perché ne volete un'altra?
Se siete abituati a scrivere cose strane come queste:
print "$var"; # SCORRETTO
$nuovo = "$vecchio"; # SCORRETTO
unafunz("$var"); # SCORRETTO
vi troverete nei guai. Queste dovrebbero (nel 99,8% dei casi)
essere le forme più semplici e dirette:
print $var;
$nuovo = $vecchio;
unafunz($var);
D'altronde, oltre a essere più lunghe da scrivere, finirete per introdurre
errori nel codice quando la cosa contenuta nello scalare non è
né una stringa né un numero, ma un riferimento:
funz(\@array);
sub funz {
my $arif = shift;
my $orif = "$arif"; # SBAGLIATO
}
Potreste anche andare incontro a problemi sottili con quelle
poche operazioni in Perl che sentono la differenza tra una
stringa ed un numero, quali il magico operatore di auto-incremento ++,
oppure la funzione syscall().
Forzare a stringa distrugge anche gli array.
@linee = `comando`;
print "@linee"; # SBAGLIATO - spazi aggiuntivi
print @linee; # giusto
|