La stringa di inizio/fine interpolazione può essere ovviamente qualunque sequenza sensata, nell'esempio che segue ho usato quella dell'interpolazione Ruby.
#!/usr/bin/env perl
use v5.10;
my $params = {
foo => "this is foo"
, bar => 'this is bar'
, baz => 'this is baz'
};
my $string = "Here is a string that needs to substitute variables #{foo} and #{bar} and last #{b
az}!";
( my $result = $string ) =~ s/\#{(\w+)}/$params->{$1}/ge;
say $result;
use v5.10;
my $params = {
foo => "this is foo"
, bar => 'this is bar'
, baz => 'this is baz'
};
my $string = "Here is a string that needs to substitute variables #{foo} and #{bar} and last #{b
az}!";
( my $result = $string ) =~ s/\#{(\w+)}/$params->{$1}/ge;
say $result;
Come si può notare ogni parametro da interpolare è racchiuso fra la stringa #{ e ], con il nome relativo al parametro. Quindi #{foo} viene poi sostuito con il valore di $params->{foo}. Per fare questo si utilizza un backreference nella cattura della parola \w+ racchiusa come primo parametro $1 nell'espressione regolare.
Ecco un esempio piu' utile di questa interpolazione:
my $params = {
username => 'luca'
, server => 'remote.node.com'
, port => 22
, protocol => 'ssh'
};
my $connection_string = "#{protocol}://#{username}@#{server}:#{port}";
( my $url = $connection_string ) =~ s/\#{(\w+)}/$params->{$1}/ge;
username => 'luca'
, server => 'remote.node.com'
, port => 22
, protocol => 'ssh'
};
my $connection_string = "#{protocol}://#{username}@#{server}:#{port}";
( my $url = $connection_string ) =~ s/\#{(\w+)}/$params->{$1}/ge;
che produce come risultato finale ssh://luca@remote.node.com:22
Nessun commento:
Posta un commento