Frage

Ich versuche, einige skalare Nachschlagewerke zu erstellen.Hier ist eine vereinfachte Version dessen, was ich erreichen möchte.Ich verwende derzeit Perl 5.10.1.

Anmerkungen:

*Farbe wird dynamisch ermittelt

*versuche, sagen wir 100 oder den roten Wert zu bekommen

*Mir ist klar, dass das mit einem Hash viel einfacher geht, aber wie kann ich das mit Skalaren machen?

$red = 100;
$blue = 150;
$green = 200;

$color = "red";

say ${$color};

Aktueller Fehler = SCALAR-Referenz während „strenge Referenzen“

War es hilfreich?

Lösung

Der Fehler, den Sie erhalten, ist darauf zurückzuführen use strict.Sie müssen ausschalten strict refs.

no strict 'refs';
say ${"$color"}; # "" are optional, I want to show it's about the string

Bearbeiten: Beachten Sie, dass dies nur funktioniert global Variablen.Sie müssen sie also mit deklarieren our oder use vars anstatt my.Dies ist dokumentiert in perlfaq7 und zeigt, warum es keine gute Idee ist, Variablen zur Benennung anderer Variablen zu verwenden.


Es ist in Ordnung, a auszuschalten strict Funktion in bestimmten Fällen.Denken Sie jedoch daran, dass es empfehlenswert ist, es in einem sehr begrenzten Bereich einzuschließen, damit es keine Auswirkungen auf Teile Ihres Programms hat, bei denen es besser ist, dies nicht zu deaktivieren.

use strict;
use warnings;
use feature 'say';

our $red = 100;
our $blue = 150;
our $green = 200;

my $color = "red";
{
  no strict 'refs'; # we need this to say the right color
  say ${$color};
}
# more stuff here

Siehe auch:

Andere Tipps

Verwenden Sie einen Hash, das ist das, wofür sie sind:

generasacodicetagpre.

Andernfalls wurde Ihr Fehler gemeldet, weil Sie gerade vergessen haben, no strict "refs"; .Aber bitte bitte nicht das tun .

Zusätzlich zu den bereits angegebenen Antworten ...

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top