【发布时间】:2014-08-31 20:16:28
【问题描述】:
通过这个例子,我想学习编写自适应子程序的最佳方法。
我需要一个修剪文本的子程序(实际上,这是一个借口,我的子程序可以做任何其他事情)。
为了更通用,我希望我的子程序接受不同类型的参数:
my @input = (' A ', ' B', 'C ');
my @trimmed = trim(@input);trim(\@input);my $out = trim($input[0]);返回“A”trim(\$input[0]);修剪@input 的第一个元素;trim(\@a, \@b, \@c);每个字符串数组都被修剪my $out = trim(\@a, ' A ', ' B');$out = (qw/A B/); (行为有待讨论)
这是我目前的丑陋解决方案:
sub trim {
state $re = qr/^\s+|\s+$/m;
my @a;
for(@_) {
if(ref eq 'SCALAR') { $$_ =~ s/$re//g; }
elsif(ref) { trim(\$_) for(@$_); }
else { push @a, s/$re//gr; }
}
return \@a if @a > 1;
return $a[0] if $a[0];
}
有没有更好的解决方案支持我上面建议的不同类型的输入?
这个问题的主要原因与我的最终应用程序有关,在该应用程序中,我携带的文本可以存储在字符串、字符串数组甚至哈希中。
我想最好写:
trim(\@allmytexts);
align(\@allmytexts, align=>'right');
比:
for(@allmytexts) {
trim($_);
align($_, align=>'right');
}
【问题讨论】:
标签: perl reference subroutine