Sono solo curioso, - è anche possibile creare una v-string da una variabile scalare senza ricorrere a eval
? .Creare un VSTRING da una variabile scalare senza utilizzare eval
I. e, questo funziona, ma utilizza eval
:
my $var = 'v1.2.3';
my $conversion = to_vstring_1($var);
# Prints "Version: 1.2.3, type: VSTRING"
printf("Version: %vd, type: %s\n", $conversion, ref \$conversion);
sub to_vstring_1 {
my ($arg) = @_;
$arg =~ tr/0-9.//cd;
$arg = 'v' . $arg;
return eval $arg;
}
Queste due varianti anche lavorare, e non usano eval
, ma stampare "scalare" al posto di "VSTRING":
my $conversion_2 = to_vstring_2($var);
# Prints "Version: 1.2.3, type: SCALAR"
printf("Version: %vd, type: %s\n", $conversion_2, ref \$conversion_2);
my $conversion_3 = to_vstring_3($var);
# Prints "Version: 1.2.3, type: SCALAR"
printf("Version: %vd, type: %s\n", $conversion_3, ref \$conversion_3);
sub to_vstring_2 {
my ($arg) = @_;
$arg =~ tr/0-9.//cd;
$arg = pack('U*', split(/\./, $arg));
return $arg;
}
sub to_vstring_3 {
my ($arg) = @_;
$arg =~ tr/0-9.//cd;
$arg =~ s/[._]?(\d+)/chr($1 & 0x0FFFF)/eg;
return $arg;
}
Quindi, c'è un quarto modo per farlo?
Lavorando con https://metacpan.org/pod/distribution/version/lib/version.pod non riesci a farlo. – simbabque