我想制作一个子程序来清理这样的字符串:
use strict;
use warnings;
sub cleanData($arg) {
#remove A and B from string
my $final_data = $arg;
$final_data =~ s/A// ;
$final_data =~ s/B/ /;
print "final data: $final_data\n";
return $final_data;
}
my $data = "11-A : 000-2B6888-00";
cleanData($data);
但是我收到了这些错误:
Illegal character in prototype for main::cleanData : $arg at Demo.pl line 4.
Global symbol "$arg" requires explicit package name at Demo.pl line 8.
Not enough arguments for main::cleanData at Demo.pl line 20, near "$data)"
Execution of Demo.pl aborted due to compilation errors.
答案 0 :(得分:2)
你想:
sub cleanData {
my $final_data = shift;
...
您可能想要写更多参数:
sub cleanData {
my ($final_data, $delete_re, $replace_re) = @_;
当然,如果单个元素的列表分配更适合您的审美,则没有任何问题。
sub cleanData {
my ($final_data) = @_;
如果您使用的是非常现代版本的Perl,使用v5.20及更高版本,您可以添加:
no warnings "experimental::signatures";
到你当前的代码,你将能够使用尖锐的Perl。
答案 1 :(得分:-1)
问题是您用于声明函数和访问其参数的语法。
看看perldoc perlsub
:有很多关于如何做这两件事的例子。