perl - 初学者调用Perl子程序

  显示原文与译文双语对照的内容

我试图教自己的Perl,我在任何地方都看到了一个可以能是一个非常简单的问题的答案。 我定义了一个子程序,用来计算单词中的字母数。 如果我这样写出来:


 $sentence="This is a short sentence.";



 @words = split(/s+/, $sentence);



 foreach $element (@words) {


 $lngths. = length($element)."n";


 }


 print"$lngthsn";



那么它就像一个魅力。 但是,如果将它包装到子程序分割中,则不会拆分输入,而是将整个句子作为单个输入。 下面是我定义子例程的方法:


sub countWords {


 @words = split(/s+/, @_);


 foreach $element(@words) {


 $lngths. = length($element)."n";


 }


 return $lngths;


}



我已经阅读过的所有页面和文本都是这样工作的,但它并不是。

提前致谢!

时间: 原作者:

问题是你对 @_的使用。 这是一个 array,但是你正在像一个标量一样访问它。

@_ 包含这里函数的所有参数。 看起来,你在传递一个句子,你想把它分开。 以下是执行这里操作的几种可能方法:


@words = split(/s+/, $_[0]);



这意味着"将第一个参数取到函数中并将它的分割"。

或者:


my $sentence = shift;


@words = split(/s+/, $sentence);



这几乎是一样的,但是使用中间变量来提高可读性。

实际上,你所做的是:


@words = split(/s+/, @_);



这意味着

  • @_ 解释为标量,这意味着 @_ 中的元素数( 在本例中为 )
  • 用空格分割字符串 "1"

返回 array:

 
@words = ("1");



 
原作者:
...