gpt4 book ai didi

function - 如何在 Perl 中检查函数参数是字符串还是数组

转载 作者:行者123 更新时间:2023-12-05 01:44:54 25 4
gpt4 key购买 nike

我正在尝试使用 Perl 编写自定义 validateParameter 函数。我有以下代码也可以使用:

sub validateParameter {
my ($args, $list) = @_;

if ( ref($list) eq "ARRAY" ) {

foreach my $key (@$list) {
if ( not defined $args->{$key} ) {
die "no $key given!";
}
}
}
#elsif ( check if string ) {
#}
}

我想按以下方式调用我的函数:

validateParameter({ hallo => "Welt", test => "Blup"},  ["hallo", "test"]);

但我也想这样调用我的函数:

validateParameter({ hallo => "Welt", test => "Blup"},  "hallo");

我知道 Perl 只有以下三种数据类型(标量、散列、数组)。但也许有一种聪明的方法来检查变量是否为字符串。

如何检查给定的 arg 是否为字符串?

最佳答案

更新:我不知何故错过了问题的结尾。大多数情况下,只需测试 ref($list) eq 'ARRAY' 即可,但要正确允许重载对象,您应该尝试取消引用参数:

if ( eval { \@$list } ) {
# it was an array
}
else {
# assume it is a string
}

原答案:

您可以检查有关参数的许多事情:

if ( ! defined $param ) {
# undefined
}
elsif ( defined Scalar::Util::blessed($param) ) {
# object
}
elsif ( ref $param ) {
# reference (return of ref will give the type)
}
elsif ( length do { no warnings "numeric"; $param & '' } ) {
# number
}
else {
# string
}

但是所有这些(也许除了定义的检查)有点违背了 Perl 自动转换为您想要的类型的目的,并且会限制可以传递的内容(例如,需要数字的字符串或 dualvar,或者需要字符串、数字或引用的重载对象,或绑定(bind)变量或魔术变量,如 $!)。

您可能还想看看什么 Params::Validate可以做到。

关于function - 如何在 Perl 中检查函数参数是字符串还是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44243718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com