首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl代码中重构变量名的推荐方法?

在Perl代码中重构变量名的推荐方法?
EN

Stack Overflow用户
提问于 2013-10-09 09:27:25
回答 2查看 194关注 0票数 2

我可以使用帕尔蒂重新格式化源代码。非常有用。

如果源文件使用像@m这样的变量,我如何才能最容易地将其重构为其他东西,例如@miles_travelled

使用正则表达式重命名似乎不安全,因为像$m这样的单独变量也可能存在(在本例中是标量),但是可以使用像$m[$i]这样的表达式引用@m变量。

例如,对于Perl代码,下列任何一项都不正确:

  • s/([\$\@])m/$1miles_travelled/g #将用相同的名称重命名标量
  • s/\$m/\$miles_travelled/g #将无法重命名数组的访问

是否有在Perl代码中安全地重命名变量名的推荐工具或方法?

EN

回答 2

Stack Overflow用户

发布于 2013-10-09 10:37:36

  1. 变量$m总是以$m的形式出现。
  2. 变量@m总是以@m$m[...]的形式出现。
  3. 变量%m总是以%m$m{...}@m{...}的形式出现。

…除了间接方法调用:new $m[...]解析为$m->new([...])。但是我们可能会忽略这个情况(使用no indirect来确保)。

如果我们想适当地处理前三起案件,我们可以

  1. s/(?<=\$)OLDNAME(?!\s*[\[\{])/NEWNAME/g替换标量
  2. s/(?<=\@)OLDNAME(?!\{)|(?<=\$)OLDNAME(?=\s*\[)/NEWNAME/g替换数组
  3. s/(?<=\%)OLDNAME|(?<=[\$\@])OLDNAME(?=\s*\{)/NEWNAME/g替换散列

请注意,对于不同的情况,查找或多次传球是必要的。

测试:

代码语言:javascript
复制
use Test::More tests => 3;

my $scalar_re = qr/(?<=\$) foo (?!\s*[\[\{])/x;
my $array_re  = qr/(?<=\@) foo (?!\{) | (?<=\$)     foo (?=\s*\[)/x;
my $hash_re   = qr/(?<=\%) foo        | (?<=[\$\@]) foo (?=\s*\{)/x;

my $input  = '$foo, $foo[1], @foo, $foo{a}, %foo, @foo{qw/a b/}';
my $scalar = '$bar, $foo[1], @foo, $foo{a}, %foo, @foo{qw/a b/}';
my $array  = '$foo, $bar[1], @bar, $foo{a}, %foo, @foo{qw/a b/}';
my $hash   = '$foo, $foo[1], @foo, $bar{a}, %bar, @bar{qw/a b/}';

is $input =~ s/$scalar_re/bar/xrg, $scalar;
is $input =~ s/$array_re /bar/xrg, $array;
is $input =~ s/$hash_re  /bar/xrg, $hash;
票数 5
EN

Stack Overflow用户

发布于 2013-10-09 13:27:21

Padre编辑将为您自动执行少量的简单重构。“重命名变量”就是其中之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19268034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档