Dois-je utiliser Internes :: SvREADONLY pour créer des variables en lecture seule en Perl?

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

  •  29-09-2019
  •  | 
  •  

Question

Recherche dans le Const :: Source rapide J'ai remarqué qu'il utilisé en interne la fonction intégrée Internals::SvREADONLY. Est-il sûr d'utiliser cette fonction directement dans mon script Perl? Il semble être présent dans le noyau de Perl 5.8.

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

La solution

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

Non.

Plus précisément, le paquet est nommé « Internes » pour une raison. Il n'est pas destiné à être utilisé en dehors du noyau. Cela pourrait changer sans préavis.

Autres conseils

est pas tout à fait répondre à votre question, mais je pense qu'il est vaut mentionner que les autres ne connaissent pas la même douleur que je: ne pas utiliser any valeur en lecture seule si vous utilisez sur une version de Perl plus tôt que 5.10.1. Considérez ce petit exemple:

{
    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;
}

Depuis mon XS-fu est pas très élevé, je ne peux pas expliquer ce qui se passe ici très cohérente (mais Devel :: Peek quelques spectacles de choses intéressantes dans la variable $class).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top