-1

我有以下问题:我有一个 perl 程序,它正在提取 csv 文件,读取它们并输出结果。有关 csv 结构的信息位于上述档案中提供的 XML 文件中。在旧版本的程序中,我已经为 CSV 文件的每一行读取了这些 XML 文件,并且一切正常:

...;
foreach $b (@gz_files) 
{
  if ( index($b, 'condition1') >= 0
    || index($b, 'condition2') >= 0 
    || index($b, 'condition3') >= 0 )
  {
    $lt = localtime;
    open (my $outputfile, '>>'.'/path_to_output/'.$dir_file.'.tmp')
      || die print $lfh "$lt -     /path_to_output/$dir_file\.tmp - $!\n";
    if ($b ne "")
    {
      # this is the procedure, which reads xml_files
      %cv_tmp = eventstype::initialize($complex_xml_path, $rating_input_xml_path);
      @EXPORT=qw(%cv_tmp);
...;

此代码将 XML 文件中的结构添加到 %cv_tmp 变量中。在 CSV 文件中的 foreach 行之后,我将 %cv_tmp 的值分配给进一步操作的 %complex_vals 。

...
%complex_vals=%mainfile::cv_tmp;
...

但是在这个操作之后,我注意到 %cv_tmp 发生了变化——这很奇怪,因为这是赋值的右侧。我不想更改每个 CSV 行上的 %cv_tmp。抱歉描述不好,但我绝对是新手。先感谢您。

4

1 回答 1

1

你可能有类似的东西

my %h1;
$h1{foo}{bar} = 123;

my %h2 = %h1;
$h2{foo}{bar} = 456;

print "$h1{foo}{bar}\n";  # 456

如果是这样,你没有改变%h1%h2$h1{foo}您正在更改和引用的(匿名)哈希$h2{foo}。您需要复制引用的哈希(而不是对哈希的引用)来解决此问题。

use Storable qw( dclone );

my %h1;
$h1{foo}{bar} = 123;

my %h2 = %{ dclone(\%h1) };
$h2{foo}{bar} = 456;

print "$h1{foo}{bar}\n";  # 123
于 2013-02-26T12:13:55.187 回答