-1

这是我的子显示问题:

sub merge_dat {
    my($new_file_name, 
        $existing_file_name, 
        $output_file_name, 
        $start_elaphrs, 
        $end_elaphrs, 
        $time_adjust,
        $existing_file_orig_name,
        $period_file,
        $indent,
        $verbose,
        $discard_dups) = (@_);

这是调用代码:

merge_dat($file_to_process, $aggregate_dat_file, $temp_file_b, undef, undef, 0, undef, undef, $indent."   ", $verbose, $discard_dups, 0);

原来 $discard_dups 总是undef. $verbose 总是很好。为什么这个论点和任何追随者总是出现undef

什么是一个好的解决方案?

4

2 回答 2

1

没有限制。很容易证明没有十个元素的限制。

$ perl -M5.010 -E'sub f { say for @_ } f(1..11);'
1
2
3
4
5
6
7
8
9
10
11

如果$discard_dupsundef,则要么@_少于 11 个元素,要么提供的第 11 个标量的值为undef

于 2021-10-14T01:15:24.600 回答
-1

您的问题没有提供任何最小的代码示例来演示该问题。

问题的根源隐藏在您的代码中。

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my @array;

@array = map { int(rand(500)) } 0..100;

merge_dat(@array);

sub merge_dat {
    my(@args) = @_;
    my $count = 0;
    say $count++ . " $_" for @args;
}

将大数组作为参数传递没有多大意义,创建副本需要大量资源并浪费 CPU 周期。

在这种情况下,最好使用数组引用或哈希引用。

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my $data;

$data->{new_fname}      = '/some/file/location1';
$data->{existing_fname} = '/some/file/location2';
$data->{out_fname}      = '/some/file/location3';
$data->{start}          = '1003';
$data->{end}            = '30013';
$data->{time_adj}       = '0:14:18.8';
$data->{orig_fname}     = '/some/file/location0';
$data->{time_period}    = '0:35';
$data->{indent}         = 8;
$data->{verbose}        = 0;
$data->{dup_discard}    = 1;

merge_dat($data);

sub merge_dat {
    my $param = shift;

    say Dumper($param);
    say '=' x 45;
    say 'Out filename: ' . $param->{out_fname};
}

输出

$VAR1 = {
          'dup_discard' => 1,
          'out_fname' => '/some/file/location3',
          'existing_fname' => '/some/file/location2',
          'new_fname' => '/some/file/location1',
          'time_adj' => '0:14:18.8',
          'time_period' => '0:35',
          'indent' => 8,
          'orig_fname' => '/some/file/location0',
          'end' => '30013',
          'start' => '1003',
          'verbose' => 0
        };

=============================================
Out filename: /some/file/location3
于 2021-10-14T01:30:10.217 回答