如何编写子程序来清理字符串

时间:2014-11-26 20:48:27

标签: perl

我问a question here

我想制作一个子程序来清理这样的字符串:

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.

2 个答案:

答案 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:有很多关于如何做这两件事的例子。