簡體   English   中英

Perl條件替換

[英]Perl conditional substitution

我有一個帶有占位符的路徑名,我想替換它:

# an example path with a placeholder
my $path = '%myproject%Web/ui/images/';

# mapping of all placeholders   
my %placeholders = (
  myproject => 'myproject/installation/all'
);

# substituting all placeholders in the path
$path =~ s!%(.*?)%!/$placeholders{$1}/!g;

# works fine -> 'myproject/installation/all/Web/ui/images/'
print $path; 

這段代碼工作正常,但有一個問題:我有一長串文件名和指定的不同占位符(因此哈希)。 現在為了更強健,如果路徑中指定的占位符在%placeholders映射中不存在,我想拋出錯誤。

有沒有辦法實現這一目標?

現在為了更強大,如果路徑中指定的占位符在%占位符映射中不存在,我想拋出一個錯誤

這可以使用/e非常容易地完成:

$path =~ s{%([^%]+)%}{
   exists($path{$1})
      ? '/'.$path{$1}.'/'
      : die "Placeholder $1 does not exist"
}ge;

注意:我認為更換是好的.*? [^%]+來防止不正確的匹配。

使用given允許這一點,但它的很多時間比它可能是如果一個語句修飾形式given可用。

use v5.10;;
use warnings;

my $path = '%myproject%Web/ui/images/'; 

my %placeholders = (
  myproject => 'myproject/installation/all'
);

$path =~ s!%(\w+)%!given ($placeholders{$1} // die qq(Invalid placeholder "$1")) { "/$_/" }!ge;

print $path;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM