perl中的函数调用
作为我课程工作的一部分,我在过去几周里第一次学习了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 = <$
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高效。