首页 > 解决方案 > 在模块版本检查期间传递给 Perl VERSION 子例程的参数

问题描述

我定义了一个 Perl 模块,如下所示:

#!/usr/bin/env perl
use strict;
use warnings;

package Sample;
use Data::Dumper; 
our $VERSION = v1.10;

sub VERSION
{
    my ($class, $version) = @_;
    print ("version is $version\n");
    print Dumper ($version);
}

传入的值的性质$version取决于模块的导入方式:

$ perl -e 'use Sample 1.0'
version is 1
$VAR1 = '1';

但是,如果所需的模块版本指定为 v-string:

$ perl -e 'use Sample v1.0'
version is 
$VAR1 = v1.0;

$version在第二种情况下传入的是什么数据类型?它显然不是一个简单的标量,也不是参考。

标签: perl

解决方案


v 字符串是一个字符串。每个数字都假定为 Unicode 代码点并转换为该字符,因此您实际打印出来的是 chr(1) 。字符(0)。您可以使用以下脚本证明这一点

my $vstring = v80.101.114.108
print $vstring, "\n";

这将打印Perl


推荐阅读