作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因为我找不到一种方便的方法来检查 $str
是否在 @array
中,所以我尝试自己制作一个,但它不起作用.
我猜这是因为数组和字符串混淆了。它不断将 0
提供给 $str
。请让我知道如何修复它。
use 5.010;
use strict;
use warnings;
sub ifin {
my (@array, $str) = @_;
for my $i (@array) {
if ($i eq $str) {
return 1;
}
}
return 0;
}
my @f = (1, 2, 3, 4);
my $k = 1;
print ifin(@f, $k);
最佳答案
您不能将数组传递给子函数,只能传递标量列表。
ifin(@f, $k);
与
相同ifin($f[0], $f[1], $f[2], $f[3], $k);
因为 @f
求值为其元素列表。
将数组传递给子对象的一种方法是传递引用。
sub ifin {
my ($array, $str) = @_;
for my $e (@$array) {
return 1 if $e eq $str;
}
return 0;
}
my @f = (1,2,3,4);
my $k = 1;
print(ifin(\@f, $k), "\n");
顺便说一下,也可以写成:
my @f = (1,2,3,4);
my $k = 1;
print(( grep { $_ eq $k } @f ) ? 1 : 0, "\n");
您可以使用pop
来保留现有的调用约定。 .
sub ifin {
my $str = pop(@_);
for my $e (@_) {
return 1 if $e eq $str;
}
return 0;
}
my @f = (1,2,3,4);
my $k = 1;
print(ifin(@f, $k), "\n");
关于arrays - 如何将一个数组和一个字符串作为参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640982/
我是一名优秀的程序员,十分优秀!