djt*_*oms 10 regex parameters perl function subroutine
我正在创建一个简单的模板文件,这将有助于创建未来的脚本,以便通过*nix系统上的命令行执行各种任务.作为其中的一部分,我可能要求用户输入需要根据源代码中提供的正则表达式进行验证的数据.
当我尝试通过命令行运行Perl代码时,会开始生成错误.我试图将正则表达式传递给repeat子例程,我不确定如何正确执行此操作.我知道我可以使用eval执行一个字符串,但是由于约定,这是我想要避免的.
Use of uninitialized value $_ in pattern match (m//) at scripts/template line 40.
Use of uninitialized value $resp in concatenation (.) or string at scripts/template line 37.
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env perl
use strict;
use warnings;
use Cwd;
use Term::ANSIColor;
use Data::Dumper;
my $log = "template.log";
my $task = "template";
my $cwd = getcwd();
my $logPath = $cwd . "/". $log;
print ucfirst($task) . " utility starting...\n";
system("cd ~/Desktop");
system("touch " . $log);
&writeLog("Test");
sub writeLog {
open(my $fh, '>>', $logPath) or die "Could not open file '$log' $!";
print $fh $_[0] . localtime() . "\n";
close $fh;
return 1;
}
sub ask {
my $question = $_[0];
my $input = $_[1];
my $resp = <>;
chomp($resp);
}
sub repeat {
my $pat = $_[0];
my $resp = $_[1];
print $pat . "\n";
print $resp . "\n";
}
&repeat(/foo|bar/i, "y");
Run Code Online (Sandbox Code Playgroud)
基于这些来源:
sub repeat {
my $pat =~ $_[0];
my $resp = $_[1];
if($pat !~ $resp) {
print "foo\n";
} else {
print "bar\n";
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
ale*_*lex 16
要创建一个正则表达式以供以后使用,我们使用qr //:
my $regexp = qr/^Perl$/;
Run Code Online (Sandbox Code Playgroud)
这将编译正则表达式以供以后使用.如果您的正则表达式出现问题,您会立即听到它.要使用此预编译的正则表达式,您可以使用以下任何一种方法:
# See if we have a match
$string =~ $regexp;
# A simple substitution
$string =~ s/$regexp/Camel/;
# Comparing against $_
/$regexp/;
Run Code Online (Sandbox Code Playgroud)
一个简单的正则表达式文字像/.../匹配再次$_.要创建独立的正则表达式对象,请使用qr//引号:
repeat(qr/foo|bar/i, "y");
Run Code Online (Sandbox Code Playgroud)
(&sub除非你知道何时以及为何需要,否则请不要调用潜艇.)
| 归档时间: |
|
| 查看次数: |
5341 次 |
| 最近记录: |