我有一些长度相同的数组.我想对第一个数组进行排序,并使所有其他数组相应地"排序".例如,如果第一个数组是(7,2,9)第二个是("seven","two","nine"),第三个数组是在("VII","II","IX")排序之后(根据第一个数组值递增),我们将拥有(2,7,9) ("two","seven","nine")和("II","VII","IX").
我怎样才能做到这一点?
在perl中定义另一个常量时,是否有一些有针对性的方法来使用一个常量?
显然,下列情况不工作
use constant {
MAIN_DIR => "/path/to/some/dir",
PROP_DIR => MAIN_DIR . "/sub_dir",
PROP_FILE => PROP_DIR . "/props.props",
};
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一想法是多use constant行,但它有点难看......
我有以下场景:
sub_1 can run immediately
sub_2 can run immediately
sub_3 can run only after sub_1 finishes
sub_4 can run only after sub_1 finishes
sub_5 can run only after sub_2 finishes
sub_6 can run only after sub_2 finishes
sub_7 can run only after both sub_1 and sub_2 finish
sub_8 can run only after both sub_1 and sub_2 finish
Run Code Online (Sandbox Code Playgroud)
我希望每个子程序尽快开始运行,而不是等待所有子程序完成。
我非常感谢您帮助为这个简单的场景创建一个干净的解决方案——我是多线程的新手。
我不确定它是否有所不同,但这些潜艇都在一个对象中。
我试图bp_genbank2gff3.pl从另一个获取genbank作为其参数的perl脚本运行(bioperl包).
这不起作用(不生成输出文件):
my $command = "bp_genbank2gff3.pl -y -o /tmp $ARGV[0]";
open( my $command_out, "-|", $command );
close $command_out;
Run Code Online (Sandbox Code Playgroud)
但确实如此
open( my $command_out, "-|", $command );
sleep 3; # why do I need to sleep?
close $command_out;
Run Code Online (Sandbox Code Playgroud)
为什么?
我认为close在命令完成之前应该阻止:
关闭任何管道文件句柄会导致父进程等待子进程完成...(请参阅http://perldoc.perl.org/functions/open.html).
编辑
我在最后一行添加了这个:
say "ret=$ret, \$?=$?, \$!=$!";
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,打印输出是:
ret=, $?=13, $!=
Run Code Online (Sandbox Code Playgroud)
(这close两种情况都意味着失败,对吧?)
我open( my $command_out, "-|", $command_string )用来执行一个命令并动态处理它的输出(不必等待命令先完成,如同system()).
我注意到当我以这种方式调用一些R脚本时,一些R消息被打印到屏幕上(例如Loading required package: ...).我想这是因为R将此输出发送到stderr(?虽然这些不是真正的错误).
是否有可能太直接了这个输出$command_out时open()-ing所以屏幕将保持清洁?
我正在使用File::Copy::Recursive::dircopy( $original_dirname, $new_dirname ) or die $!;从Perl脚本中复制只读目录.我收到一个Permission denied错误.
我可以看到它$new_dirname已创建,但被标记为只读(与原始目录一样).也许这可以防止将内容复制到其中?
我想匹配路径,/this/is/my/dir/name/anything但不是/this/is/my/dir/name/anything/anything2.换句话说,我希望在第一级匹配``/ this/is/my/dir/name /`下的所有文件和子目录,但不要匹配更低级别的任何文件和子目录.
我已经安装了perlbrew,这似乎是一个很好的解决方案,但在实际尝试安装一些Perl版本时,我得到了一些毫无意义的错误:
$ perlbrew install perl-5.12.1
Attempting to load conf from /home/dave/perl5/perlbrew/Conf.pm
Fail to get http://search.cpan.org/dist/perl-5.12.1 (error: ) at /home/dave/perl5/perlbrew/bin/perlbrew line 1277.
Run Code Online (Sandbox Code Playgroud) mysub 获取子例程引用作为其第一个参数.
我可以直接打电话mysub(sub{some subroutine body here})吗?即在通话时定义一个匿名子程序?
语法是否正确(是否真的是对它的引用sub传递)?
最好通过一个例子问:
my $var1=1;
my $var2;
my $var3=3;
# say "at least one undef" if at least one of $var1, $var2, $var3 is undef
Run Code Online (Sandbox Code Playgroud)
显然我可以显式循环并执行此操作,但我总是希望找到一个可以实现相同结果的衬垫.