2015-09-30 1 views
1
#!/usr/bin/perl -w 
use strict; 
use warnings; 

use Class::Struct; 

struct System => { 
    Name => '$', 
}; 

my $system = new System; 
$system->Name("Server1"); 

my $strout1 = qq{Server is ${$system->Name}\n}; 
my $strout2 = "Server is \"".$system->Name."\"\n"; 

print $strout1; 
print $strout2; 

résultats dans:Impossible d'utiliser la chaîne (« Serveur1 ») comme référence SCALAIRE tout « strict refs » dans l'utilisation

Impossible d'utiliser la chaîne (« Serveur1 ») comme référence SCALAIRE tandis que "strict refs" dans utilisation à la ligne de test.pl 14.

Je veux être en mesure d'utiliser et qq dEREF $system->Name correctement. Quelqu'un peut-il expliquer où je vais mal?

Répondre

4

Les appels de méthode ne sont pas interpolés dans les chaînes entre guillemets, mais les déréférences sont. Si vous voulez interpoler le résultat de l'appel de méthode, vous devez déréférencer une référence à elle:

my $strout1 = qq{Server is ${\$system->Name}\n}; 
+0

Parfait merci. – Ryan

+1

Typiquement '" @ {[$ system-> Name]} "' est utilisé à la place –

1

La méthode Name renvoie-t-elle vraiment une référence? Parce que cela semble mal:

${$system->Name} 

C'est déréférencement quelque chose, donc je pense que doit être écrit simplement comme $system->Name

Vous déclencherez la même erreur si vous essayez:

print ${"Server1"}; 

Ce qui suggère que vous obtenez en fait une chaîne de texte.

+0

C'était la seule façon que je pourrais obtenir la valeur à apparaître dans toute sortie. – Ryan