这是我的旧问题的扩展:Pass a hash object from one perl script to another using system。 @Sobrique在那里回答了我的问题。
现在,我想知道是否可以将哈希对象传递给另一个perl脚本,方法与我上面的问题相同,但使用bsub
。
包装脚本:script1.pl
use strict;
use warnings;
use Storable qw ( freeze );
use MIME::Base64;
my %test_hash = (
"fish" => "paste",
"apples" => "pears"
);
my $frozen = encode_base64 freeze( \%test_hash );
my ${string} = 'sample1';
# instead of just using system like this
# system("perl", "some_other_script.pl", $frozen);
# I want to use something like this:
system('bsub','-J',${string},'-o','${string}.out','-e','${string}.err','perl','some_other_script.pl',$frozen);
some_other_script.pl
use strict;
use warnings;
use Storable qw ( thaw );
use Data::Dumper;
use MIME::Base64;
# should read the imported hash correctly and print it out
my ($imported_scalar) = @ARGV;
print $imported_scalar;
my %param = %{ thaw (decode_base64 $imported_scalar ) };
print $param{'fish'};
print "\n";
我怎样才能做到这一点?任何帮助将不胜感激。
谢谢!
答案 0 :(得分:0)
这实际上是关于bsub
而不是perl
的问题。通过Base64编码参数传递参数可能会有所帮助,但实际上如果您的目的是将数据传递到批处理系统,则可能值得使用输入文件:
如果查看bsub
联机帮助页,您会看到:
-i input_file | -is input_file
这可能是将“输入”交给批处理作业的更好方法。