只想知道是否/如何做到這一點的工作:Perl的正則表達式 - 商店參考正則表達式捕獲在一個變量
my $capture = qr/perl pattern(is.*)/;
my $string = "perl pattern is complicated";
my $print_it = "Printing test: $1\n";
if($string =~ m/$capture/){
print $print_it;
}
我試着用不同的方式報價$ print_it(QW,QR「」「」 ),但在創建模式字符串時未初始化,並且在運行時未設置。
其他方法,我敢肯定,但這會很方便。編輯: 這是我想要完成的。我希望用戶提供一個參數來定義如何格式化輸入字符串。比如,--format 1 輸入字符串: 「user = username Resources_used_cput = 20:00:01 Resources_used_walltime = 10:00」 假設我只想根據命令行中的一個標誌來拉動walltime或cputime和username。我正在考慮定義一組格式化選項,如0表示用戶名,1表示用戶名和cputime,2表示用戶名和walltime。有了3,使用暴力很容易,只需定義一些if/then語句或匹配的案例。隨着這個規模的擴大,我更願意將一個數組放在一個大的if/case列表中。
$formats = (
qr/user=(\S+)/,
qr/user=(\S+).*Resources_used_cput=(\d+):(\d+):(\d+)/,
qr/user=(\S+).*Resources_used_walltime=(\d+):(\d+)/);
# These are wrong for reasons stated in answers:
$responses = (
"username is $1",
"user $1 used $4 seconds, $3 minutes and $2 hours of cputime"
"user $1 used $2 hours $3 minutes of walltime");
VS
if(m/user=(\S+).*Resources_used_cput=(\d+):(\d+):(\d+).*Resources_used_walltime=(\d+):(\d+)/){
$user=$1;
$wall="$5:$6";
$cpu="$2:$3:$4";
}
if($format == 0){
print "username is $user"
}
elsif....
我猜有一個更好的辦法?
'$ 1'只是一個變量,當您進行賦值時,變量將在字符串中擴展。 – Barmar
我不認爲有什麼辦法可以創建一個只在打印時擴展其變量的字符串。你爲什麼不寫一個你想要的功能呢? – Barmar