Perl Can';t调用方法";dclone“;论无删减参照

Perl Can';t调用方法";dclone“;论无删减参照,perl,Perl,我得到以下错误 "Can't call method "dclone" on unblessed reference" 什么是“无版权引用””以及如何更正。请参考以下代码。代码 use strict; use warnings;

我得到以下错误

"Can't call method "dclone" on unblessed reference"
什么是“无版权引用””以及如何更正。请参考以下代码。

代码

use strict;                                                                        
use warnings;                                                                      
use YAML::XS 'LoadFile';                                                           
use Data::Dumper;                                                                  

my $config = LoadFile('config.yml');                                               
my $record1 = $config->{Record1};                                                  
print "record1: $record1\n";                                                       
print Dumper($config);                                                             

$config->{Record2} =  dclone $config->{Record1};                                   
print Dumper($config);
以下是输出

record1: ARRAY(0x275fa88)
$VAR1 = {
          'Record1' => [
                         {
                           'Name' => 'Karun'
                         },
                         {
                           'Phone' => 123
                         }
                       ]
        };
Can't call method "dclone" on unblessed reference at p1.pl line 11.

dclone
不是Perl中的核心函数,也不是由您导入的模块提供的。但它是由提供的。你可能失踪了

use Storable 'dclone';

dclone
不是Perl中的核心函数,也不是由您导入的模块提供的。但它是由提供的。你可能失踪了

use Storable 'dclone';

在不知道dclone是函数的情况下,perl将代码解析为类或对象上方法dclone的间接对象调用
$config->{Record1}
,就好像它是
$config->{Record1}->dclone
。添加了parens(
dclone(
dclone($config->{Record1})
),它将给出一个更有用的“未定义的子例程&main::dclone called”错误。在不知道dclone是函数的情况下,perl将代码解析为类或对象上方法dclone的间接对象调用
$config->{Record1}
,就好像它是
$config->{Record1}->dclone
。添加了parens(
dclone($config->{Record1})
),它将给出一个更有用的“未定义的子例程&main::dclone called”错误。