如何将tcl数组传递给perl命令行参数

如何将tcl数组传递给perl命令行参数,perl,tcl,Perl,Tcl,我想从tcl调用perl脚本,在其中我想将tcl数组发送到perl命令行参数,以及如何在perl脚本中使用inside 谢谢,考虑到Tcl阵列 array set ary {foo 11 bar 12 baz 13} 您可以这样将其传递给perl: exec perl script.pl {*}[array get ary] 在perl中,您可以说 my%hash=@ARGV; 演示(从shell提示符): tcl: perl: my@ar1=split(“,$ARGV[0]); my@a

我想从tcl调用perl脚本,在其中我想将tcl数组发送到perl命令行参数,以及如何在perl脚本中使用inside

谢谢,

考虑到Tcl阵列

array set ary {foo 11 bar 12 baz 13}
您可以这样将其传递给perl:

exec perl script.pl {*}[array get ary]
在perl中,您可以说

my%hash=@ARGV;
演示(从shell提示符):

tcl:

perl:

my@ar1=split(“,$ARGV[0]);
my@ar2=split(“,$ARGV[1]);
我的%hash=();
我的$length=@ar1;
对于(我的$i=0;$i<$length;$i++){
$hash{$ar1[$i]}=$ar2[$i];
}
foreach my$x(密钥%hash){
打印“$hash{$x}\n”;
}
输出: 6.
5

你试过什么?你有什么问题?请向我们展示您的代码。Tcl数组在语义上类似于Perl哈希。您需要确定要使用的序列化格式。Tcl有一个本地版本,但这可能不是Perl最容易使用的版本。也许JSON对象可以工作?这在语义上是正确的,而且双方都有合适的库。还要注意,大数组/散列可能会命中命令行参数;传递管道可能更好,甚至可以正确地完成工作并使用SQLite数据库……命令行参数只能是字符串。您需要以某种方式序列化数组(例如,使用JSON)并使用Perl编程对其进行反序列化。最简单的方法是将数据存储在文件中,将文件名作为参数传递给Perl脚本。您可以使用tcl和perl可以存储和读取的任何格式。对于小型阵列(大小取决于平台)来说,这很好。对于大型阵列,请通过文件或管道发送。
$ echo '
  array set ary {foo "11 22" bar 12 baz 13}
  puts [exec perl -MData::Dump=dd -e {my %hash = @ARGV; dd \%hash} {*}[array get ary]]
' | tclsh
{ bar => 12, baz => 13, foo => "11 22" }
set ax(0) 5
set ax(1) 6
set values ""

set names [array names ax]

  foreach xc $names {
    lappend values $ax($xc)
  }

exec perl path_to_perl_script.pl $names $values
 my @ar1 = split(" ", $ARGV[0]);
 my @ar2 = split(" ", $ARGV[1]);

 my %hash = ();
 my $length = @ar1;

   for (my $i=0; $i < $length; $i++) {
    $hash{$ar1[$i]} = $ar2[$i];
   }

   foreach my $x (keys %hash) {
    print " $hash{$x}\n";
   }