如何在python中用perl_python – 如何在表达式中使用Perl的///?

你似乎对如何运作有误解. =〜是一个绑定运算符,它将变量与regexp运算符相关联.它没有做任何任务.

regexp运算符默认使用主题变量$_,所以s / foo / bar /;与$_ = ~s / foo / bar /;相同.没有分配.主题变量已转换.

在对任何其他变量进行操作时,情况类似. $var = ~s / foo / bar /;通过用bar替换foo的第一个实例来转换$var.没有分配.

我能给你的最好建议是用Python编写Python,用Perl编写Perl.不要指望两种语言是一样的.

您可以像DVK建议一样编写一个子程序来重现您习惯的替换行为.

或者你可以尝试一些惯用的Perl.根据您表达的在一行中应用多个转换的愿望,我提供了一些您可能会觉得有用的示例.

在这里,我在一个项目上使用for循环来主题化$var并应用许多硬编码转换:

for( $var ) {

s/foo/bar/;

s/fizz/buzz/;

s/whop/bop-a-loo-bop/;

s/parkay/butter/;

s/cow/burger/;

}

或者您可能需要应用一组可变的变换.我定义了一个子例程来循环定义旧/新转换对的数组引用列表.此示例利用Perl的面向列表的参数处理来处理任意数量的转换.

my $foo = transform(

'abcd' =>

[ 'a', 'b' ],

[ 'bb', 'c' ],

[ 'cc', 'd' ],

[ 'dd', 'DONE' ],

);

sub transform {

my $var = shift;

for (@_ ) {

my ($old, $new) = @$_;

$var =~ s/$old/$new/;

}

return $var;

}

最后有点搞乱提供修改其第一个参数的转换版本:

my $foo = 'abcd';

transform_in_place(

$foo =>

[ 'a', 'b' ],

[ 'bb', 'c' ],

[ 'cc', 'd' ],

[ 'dd', 'DONE' ],

);

print "$foo\n";

sub transform_in_place {

for my $i (1..$#_ ) {

my ($old, $new) = @{$_[$i]};

$_[0] =~ s/$old/$new/;

}

}

对于我自己的项目,我可能会根据特定问题的需要使用前两个选项中的一个.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值