perl中的函数调用

perl中的函数调用,perl,function,subroutine,Perl,Function,Subroutine,作为我课程工作的一部分,我在过去几周里第一次学习了perl编程语言。我一直在编写小函数并进行函数调用。我已经编写了一个字符串匹配函数 use strict; use warnings; sub find_multi_string { my ($file, @strings) = @_; my $fh; open ($fh, "<$file"); #store the whole file in an array my @array = <$

作为我课程工作的一部分,我在过去几周里第一次学习了perl编程语言。我一直在编写小函数并进行函数调用。我已经编写了一个字符串匹配函数

use strict;
use warnings;

sub find_multi_string {
    my ($file, @strings) = @_; 
    my $fh;
    open ($fh, "<$file");
    #store the whole file in an array
    my @array = <$fh>;

    for my $string (@strings) {
        if (grep /$string/, @array) {
            next;
        } else {
            die "Cannot find $string in $file";
        }   
    }   

    return 1;
}

find_multi_string('file name', 'string1','string2','string3','string4','string 5');

如果总是将参数和返回值传递给子例程,那将是一个错误

您所描述的本质上是仅使用子例程来细分和记录代码。如果要这样做,最好是完全删除子例程,并在代码部分之前包含注释

总的来说,您的代码看起来很好。不过,您可能希望使用
quotemeta
,并且您的逻辑可以简化一点:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    # Load the file
    my $data = do {
        open my $fh, "<", $file;
        local $/;
        <$fh>
    };

    for my $string (@strings) {
        if ($data !~ /\Q$string/) {
            die "Cannot find $string in $file";
        }   
    }   

    return 1;
}

find_multi_string('file name', 'string1','string2','string3','string4','string 5');
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
#加载文件
我的$data=do{

打开我的$fh,“这将是一个错误,始终将参数和返回值传递给您的子例程

您所描述的本质上是仅使用子例程来细分和记录您的代码。如果要这样做,最好是完全删除子例程,并在代码部分之前包含注释

总的来说,您的代码看起来还不错。不过,您可能希望使用
quotemeta
,并且您的逻辑可以简化一点:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    # Load the file
    my $data = do {
        open my $fh, "<", $file;
        local $/;
        <$fh>
    };

    for my $string (@strings) {
        if ($data !~ /\Q$string/) {
            die "Cannot find $string in $file";
        }   
    }   

    return 1;
}

find_multi_string('file name', 'string1','string2','string3','string4','string 5');
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
#加载文件
我的$data=do{

打开我的$fh,“这将是一个错误,始终将参数和返回值传递给您的子例程

您所描述的本质上是仅使用子例程来细分和记录您的代码。如果要这样做,最好是完全删除子例程,并在代码部分之前包含注释

总的来说,您的代码看起来还不错。不过,您可能希望使用
quotemeta
,并且您的逻辑可以简化一点:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    # Load the file
    my $data = do {
        open my $fh, "<", $file;
        local $/;
        <$fh>
    };

    for my $string (@strings) {
        if ($data !~ /\Q$string/) {
            die "Cannot find $string in $file";
        }   
    }   

    return 1;
}

find_multi_string('file name', 'string1','string2','string3','string4','string 5');
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
#加载文件
我的$data=do{

打开我的$fh,“这将是一个错误,始终将参数和返回值传递给您的子例程

您所描述的本质上是仅使用子例程来细分和记录您的代码。如果要这样做,最好是完全删除子例程,并在代码部分之前包含注释

总的来说,您的代码看起来还不错。不过,您可能希望使用
quotemeta
,并且您的逻辑可以简化一点:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    # Load the file
    my $data = do {
        open my $fh, "<", $file;
        local $/;
        <$fh>
    };

    for my $string (@strings) {
        if ($data !~ /\Q$string/) {
            die "Cannot find $string in $file";
        }   
    }   

    return 1;
}

find_multi_string('file name', 'string1','string2','string3','string4','string 5');
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
#加载文件
我的$data=do{

打开my$fh,“对原始代码的一些改进:

  • 使用
  • 使用3-args
  • 由于要检查文件中的任何位置,只需将文件作为单个字符串加载即可
  • 如果匹配字符串只是没有来自regexp的元字符的文本,只需使用函数
您的问题是关于从程序中传递函数参数。 我怀疑您正在查找
@ARGV
。请参阅

以下是修改后的代码:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    my $content = do {
        open my $fh, '<', $file;
        local $/;
        <$fh>
    };


    foreach (@strings) {
        die "Cannot find $string in $file" unless index($content, $_) >= 0;
    }   

    return 1;
}

find_multi_string(@ARGV);
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
我的$content=do{

打开my$fh,“对原始代码的一些改进:

  • 使用
  • 使用3-args
  • 由于要检查文件中的任何位置,只需将文件作为单个字符串加载即可
  • 如果匹配字符串只是没有来自regexp的元字符的文本,只需使用函数
您的问题是关于从程序中传递函数参数。 我怀疑您正在查找
@ARGV
。请参阅

以下是修改后的代码:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    my $content = do {
        open my $fh, '<', $file;
        local $/;
        <$fh>
    };


    foreach (@strings) {
        die "Cannot find $string in $file" unless index($content, $_) >= 0;
    }   

    return 1;
}

find_multi_string(@ARGV);
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
我的$content=do{

打开my$fh,“对原始代码的一些改进:

  • 使用
  • 使用3-args
  • 由于要检查文件中的任何位置,只需将文件作为单个字符串加载即可
  • 如果匹配字符串只是没有来自regexp的元字符的文本,只需使用函数
您的问题是关于从程序中传递函数参数。 我怀疑您正在查找
@ARGV
。请参阅

以下是修改后的代码:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    my $content = do {
        open my $fh, '<', $file;
        local $/;
        <$fh>
    };


    foreach (@strings) {
        die "Cannot find $string in $file" unless index($content, $_) >= 0;
    }   

    return 1;
}

find_multi_string(@ARGV);
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
我的$content=do{

打开my$fh,“对原始代码的一些改进:

  • 使用
  • 使用3-args
  • 由于要检查文件中的任何位置,只需将文件作为单个字符串加载即可
  • 如果匹配字符串只是没有来自regexp的元字符的文本,只需使用函数
您的问题是关于从程序中传递函数参数。 我怀疑您正在查找
@ARGV
。请参阅

以下是修改后的代码:

use strict;
use warnings;
use autodie;

sub find_multi_string {
    my ($file, @strings) = @_; 

    my $content = do {
        open my $fh, '<', $file;
        local $/;
        <$fh>
    };


    foreach (@strings) {
        die "Cannot find $string in $file" unless index($content, $_) >= 0;
    }   

    return 1;
}

find_multi_string(@ARGV);
使用严格;
使用警告;
使用自动模具;
子查找\u多\u字符串{
我的($file,@strings)=@;
我的$content=do{

打开我的$fh,'为什么?你想实现什么?使用!为什么?你想实现什么?使用!为什么?你想实现什么?使用!为什么?你想实现什么?使用!将裸字符串转换为regexp与\Q是一种资源浪费。只需使用该函数,因为这样效率会更高。将裸字符串转换为regexp with\Q是一种资源浪费。只需使用该函数,因为这样会更高效。使用\Q将裸字符串转换为regexp是一种资源浪费。只需使用该函数,因为这样会更高效。使用\Q将裸字符串转换为regexp是一种资源浪费。只需使用该函数,因为这样会更高效e高效。