arrays - Perl 数组和字符串作为方法参数

标签 arrays perl

我有一个方法,我给出两个参数:一个数组和一个字符串 .问题是当我初始化两个不同的变量时,一个用于数组,一个用于字符串,我在第一个变量中获取数组的第一个元素,在第二个变量中获取第二个元素。我的问题是如何获得一个变量中的整个数组和另一个变量中的字符串?

分析.pm

sub analyze {
    my $self = shift;
    my ($content, $stringToSearch) = @_; 
    # my ($stringToSearch) = @_;
    print "$stringToSearch";
    if (!defined($stringToSearch) or length($stringToSearch) == 0) { die 'stringToSearch is not defined yet! ' }
    foreach my $element ($content) {
        #print "$element";
        my $loc = index($element, $stringToSearch);
        # print "$loc\n";
        given ($stringToSearch) {
            when ($stringToSearch eq "Hi") {
                if ($loc != 0) {
                    print "Searched word is Hi \n"; 
                } else {
                    print "No word found like this one! "
                }
            }
            #when ($stringToSearch == 'ORIENTED_EDGE') {
            #   print 'Searched word is ORIENTED_EDGE';
            #} # Printed out because i dont need it now!
        }
        break; # For testing
    }
}

例子.pm
my @fileContent = ('Hi', 'There', 'Its', 'Me')
my $analyzer = Analyze->new();
$analyzer->analyze(@fileContent, 'Hi');

当我改变$content@content它将数组和字符串的所有值放入 @content
我希望有人能够帮助我。我是 Perl 的初学者。提前致谢

最佳答案

您不能将数组传递给 subs(或方法),只能传递标量列表。像这样,

$analyzer->analyze(@lines, 'Hi');

是一样的
$analyzer->analyze($lines[0], $lines[1], ..., 'Hi');

这意味着以下内容将无法正常工作:
my (@strings, $target) = @_;

Perl 不知道有多少项属于原始数组,因此将它们全部放在 @strings 中。 , 离开 $target不明确的。

解决方案

你可以做你想做的事情如下:
sub analyze {
    my $self = shift;
    my $target = pop;
    my @strings = @_
    for my $string (@strings) {
       ...
    }
}

$analyzer->analyze(@lines, 'Hi')

或者没有不必要的副本:
sub analyze {
    my $self = shift;
    my $target = pop;
    for my $string (@_) {
       ...
    }
}

$analyzer->analyze(@lines, 'Hi')

首先通过目标会更容易。
sub analyze {
    my ($self, $target, @strings) = @_;
    for my $string (@strings) {
       ...
    }
}

$analyzer->analyze('Hi', @lines)

或者没有不必要的副本:
sub analyze {
    my $self = shift;
    my $target = shift;
    for my $string (@_) {
       ...
    }
}

$analyzer->analyze('Hi', @lines)

您还可以传递对数组的引用(以您喜欢的任何顺序),因为引用是一个标量。
sub analyze {
    my ($self, $target, $strings) = @_;
    for my $string (@$strings) {
       ...
    }
}

$analyzer->analyze('Hi', \@lines)

我会选择倒数第二。它遵循与众所周知的 grep 相同的一般模式。 .
my @matches = grep { condition($_) } @strings;

关于arrays - Perl 数组和字符串作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799713/

相关文章:

perl - 如何在 Perl 中将十六进制转换为字符串

arrays - 获取通过数组中的 http 调用接收到的 json - Swift iOS

c++ - 使用 void 指针在 C++ 中打印数组

c++ - 如何在索引为空时停止遍历数组?

multithreading - 线程内的 Perl 设置超时失败 : 'Alarm clock'

perl - 通过管道 ls 输出到一行 perl 脚本

Java代码越界异常

javascript - 比较两个数组并插入空值

perl - 在 perl 中使用 WWW::YouTube::Download 时出错

python - 其他优于基于 TCL 的 Expect 的解决方案/语言?