【问题标题】:How to pass each element in a list as arguments of a function如何将列表中的每个元素作为函数的参数传递
【发布时间】:2017-08-01 08:16:28
【问题描述】:

我的数据在一个数组中。我需要将数组值传递给ars_CreateEntry 函数 ARSperl。 该数组是根据接收到的输入动态形成的,因此其长度可能会有所不同。

#!/usr/bin/perl

use strict;

use ARS;
use ARS::Login;

my $server   = '125.10.14.1';
my $username = 'RemedyUser';
my $dbsid    = $ENV{'ORACLEID'};
my $dbuser   = 'admin';
my $schema   = 'Form 1';

my $control = remedyars_login( $username )
        or die "ERROR: Cannot login to $server \n";
my $dbh = remedydbi_login( $dbsid, $dbuser )
        or die( "Cannot connect to $dbsid: $DBI::errstr\n" );

my @arr = ( 1, "New", 2, "Test", 3, "Hi" );
my $created_ticket = ars_CreateEntry( $control, $schema, join( ",", @arr ) )
        or die "ERROR: Cannot create host ticket: $ars_errstr\n";

ars_Logoff( $control );

当我运行脚本时出现此错误

错误:无法创建主机票证:[错误] 参数数量无效 (ARERR #80000)

【问题讨论】:

  • 为什么要将数组转换为字符串(使用join)?也许您需要传递对数组的引用?
  • 通过阅读文档,您似乎只需要按原样传递@arr...尽管其中的数字可能不正确

标签: perl remedy


【解决方案1】:

直接使用数组(见ars_CreateEntry examples):

my @arr=(1,"New",2,"Test",3,"Hi");
die unless @arr % 2 == 0; # enforce even number of elements in @arr
my $created_ticket=ars_CreateEntry( $control, $schema, @arr) 
  or die "ERROR: Cannot create host ticket: $ars_errstr\n";

如果 ars_CreateEntry 对参数的顺序不挑剔,甚至更好地使用哈希而不是数组:

my %params=(1 => "New",2 => "Test", 3 => "Hi");
# hash will be converted to array
my $created_ticket=ars_CreateEntry( $control, $schema, %params) 
  or die "ERROR: Cannot create host ticket: $ars_errstr\n";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2021-10-17
    • 2011-02-14
    • 1970-01-01
    • 2020-09-27
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多