How do pass one array and one string as arguments to a function?
arrays, function, parameters, perl, string
Solution
You can't pass arrays to subs, only lists of scalars.
ifin(@f, $k);
is the same as
ifin($f[0], $f[1], $f[2], $f[3], $k);
because `@f` evaluates to a list of its elements.
One way of passing an array to a sub is to pass a reference.
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");
By the way, that can also be written as:
my @f = (1,2,3,4);
my $k = 1;
print(( grep { $_ eq $k } @f ) ? 1 : 0, "\n");
You could keep the existing calling convention by using `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");
Problem
Because I can't find a convenient way to check if `$str` is in `@array`, I'm trying to make one myself, but it is not working. I guess it is because of the mix-up of array and string. It keeps giving `0` to `$str`. Please let me know how to fix it. ``` 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); ```