Soll ich Internals :: SvREADONLY für die Erstellung von Nur-Lese-Variablen in Perl?

StackOverflow https://stackoverflow.com/questions/4098816

  •  29-09-2019
  •  | 
  •  

Frage

Ein Blick in den Konst :: Schnelle Quelle ich bemerkte, dass sie die eingebaute Funktion Internals::SvREADONLY intern verwendet. Ist es sicher, dass die Funktion direkt in meinem Perl-Skript zu benutzen? Es scheint, von Perl 5.8 in Kern zu sein.

my $PI = 4 * atan2 1, 1;
Internals::SvREADONLY($PI => 1);
$PI = 2.718;   # Modification of a read-only value attempted at ..
War es hilfreich?

Lösung

C:\>perldoc Internals
No documentation found for "Internals".

Nein.

Genauer gesagt, wird das Paket „Internals“ für einen Grund genannt. Es ist nicht für den Einsatz außerhalb des Kerns vorgesehen. Es könnte ohne vorherige Ankündigung geändert werden.

Andere Tipps

Das ist nicht ganz Ihre Frage zu beantworten, aber ich denke, es ist erwähnenswert ist, so dass andere nicht die gleichen Schmerzen wie ich: nicht verwenden jeder Nur-Lese-Wertes, wenn du läuft auf eine Version von Perl früher als 5.10.1. Betrachten wir dieses kleine Beispiel:

{
    package Foo;
    sub foo { print "I'm in foo!\n"; }
}

use strict;
use warnings;
use Readonly;
Readonly my @classes => qw(Foo);

foreach my $class (@classes)
{
    # this dies with "Can't call method "foo" without a package or object reference"
    $class->foo;
}

Da meine XS-fu nicht sehr hoch ist, kann ich nicht erklären, was hier los ist sehr kohärent (aber Devel :: Peek zeigt einige interessante Dinge in der $class Variable).

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