次の Perl コードを見つけました。
$url = "http://example.com/?param1=#param1#¶m2=#param2#"
$param1="hello";
$param2="world";
$url =~ s/#param1#/$param1/g;
$url =~ s/#param2#/$param2/g;
ここで、=~
オペレーターは正規表現を適用し、元の変数 ( ) を置き換えます$url
。Perl で変更を別の変数に適用し、1 つのステートメントで 2 つの正規表現を適用する方法はありますか?
次のようになります。
$url_template = "http://example.com/?param1=#param1#¶m2=#param2#"
$param1="hello";
$param2="world";
$url = $url_template ~ s/#param1#/$param1/g ~ s/#param2#/$param2/g;
このコードは機能しません。問題は、それを機能させる方法です。
また、文字列をフォーマットするより良い方法はありますか? 例えば
String.format("http://example.com/?param1={param1}¶m2={param2}", {"param1": param1, "param2": param2}).
最後に、(適切にエンコードされるように) URL パラメータをフォーマットするより良い方法はありますか? 例えば
URL.format("http://example.com/?param1={param1}¶m2={param2}", {"param1": param1, "param2": param2}).
更新: choroba と aleroot に基づく完全な回答:
my $template_url = "http://example.com/?param1=#param1#¶m2=#param2#";
my %params = (param1 => 'hello1', param2 => 'world2');
(my $url = $template_url) =~ s/#(.*?)#/$params{$1}/g;
URL のエンコードには、 URL::Encodeを使用します。