我是Perl的新手,我正在尝试做一些事情而无法找到答案.
我创建了一个Java项目,其中包含一个获取多个输入参数的主类.
我想用Perl包装我的Java:我想创建一个获取输入参数的Perl脚本,然后将它们传递给Java程序,然后运行它.
例如:
如果我的主叫mymain,我这样称呼它:mymain 3 4 hi(3,4并且hi是输入参数),我想创建一个名为Perl程序myperl,当它被调用作为myperl 3 4 hi将传递参数给Java程序并运行它.
我怎样才能做到这一点?
我有一个关于通过引用Perl中的子例程的问题.对于值,如果我使用@_传递它可以工作但是对于ref只有shift工作.不知道为什么.我有以下示例代码:
这有效:
#! /usr/bin/perl
use strict;
use warnings;
my $name = 'John';
PassScalarByRef( \$name );
sub PassScalarByRef{
my $got = shift;
print "Hello $$got\n";
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
#! /usr/bin/perl
use strict;
use warnings;
my $name = 'John';
PassScalarByRef( \$name );
sub PassScalarByRef{
my $got = @_;
print "Hello $$got\n";
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码.我正在搜索重复的目录.我需要深度优先搜索.我使用递归,如果DH看到一个文件夹,那么它会查找该文件夹.但完成此文件夹后DH处理关闭和程序不会查看顶级文件夹的剩余部分.
#! /usr/bin/perl
use Digest::MD5;
dtraverse(@ARGV) ;
sub dtraverse {
my $fullpathname ;
my @subdirlist ;
my @filelist2 ;
my $newpath ;
my $name ;
my $d ;
print "entered nnnn\n";
$fullpathname = $_[0];
opendir(DH,$fullpathname) or die("Cannot open directory\n");
@subdirlist = () ;
@filelist2 = () ;
while ($name = readdir(DH) ) {
next if (($name eq ".") or ($name eq "..") );
$newpath = $fullpathname . "/" . $name ;
print "asdasd == $name\n";
if (-d $newpath ) { …Run Code Online (Sandbox Code Playgroud) 我的foreach循环不能按照我的意愿工作.我希望它循环遍历数组,并找到一个元素存在的时间和元素不存在的时间.但是,我得到了所有人的说法Not an apple.
@fruit = ('apple','orange','pear');
foreach(@fruit){
if(@fruit != 'apple'){
print "Not an apple\n";
}
else{
print "Is an apple\n";
}
}
Run Code Online (Sandbox Code Playgroud) 我有N数组,我想在单个for循环中打印它们的第一个元素
我的代码:
@arr1=qw(1..5);
@arr2=qw(6..10);
...
@arrN=qw(...);
for($i=1;$i<=$N;$i++)
{
print "$arr[$i][0]";
}
Run Code Online (Sandbox Code Playgroud) 我有两个包含整数的数组.例如:
@arr1 = ( 2, 5, 6)
@arr2 = ( 1, 4, 7)
Run Code Online (Sandbox Code Playgroud)
如何找到这两个数组之间的最小值?
我正在使用的模式s///包含正则表达式特殊字符.我如何引用它们以便正则表达式引擎将它们视为文字字符.
我可以quotemeta在这样的模式中调用子例程()吗?
$string =~ s/quotemeta($regex)/$new/g;
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我有2个(大)文件.第一个是大约20万行,第二个是大约3000万行.
我想使用Perl检查第一行中的每一行是否在第二行中.将第一行中的每一行直接与第二行中的每一行进行比较是否更快,或者将它们全部存储在两个不同的数组中然后操作数组更好?
我的意见:
$brackets = '\left \right \center \right \left \middle';
Run Code Online (Sandbox Code Playgroud)
在上面的字符串中,我需要将每个\left字符串替换为(开括号,将每个字符串替换\right为)右括号.
我可以用几种方法替换以获得输出.但是我想知道如何在r修饰符中完成此操作.这是我到目前为止所拥有的
$brackets=~s{\\(left|right)}{$&=~s/\\left/\(/r && $&=~s/\\right/\)/gr; }ge;
Run Code Online (Sandbox Code Playgroud)
我不知道在哪里可以找到我的错误.
我正在将标量变量传递给子例程,在该子例程中我想测试参数是否与正则表达式匹配:
use strict;
use warnings;
use Data::Dumper;
print "Please enter your first name followed by your last name. For example: John Smith.\n";
chomp(my $name = <STDIN>);
&analyze_name($name);
sub analyze_name {
if ($_ =~ /^\w+\s+\w+$/) {
print "You entered $_.";
} else {
print "Incorrect convention";
}
}
Run Code Online (Sandbox Code Playgroud)
我收到输出有以下错误
Please enter your first name followed by your last name. For example: John Smith.
firstname lastname
Incorrect convention
Use of uninitialized value $_ in pattern match (m//) at /home/jhusbands/scripts/examples/test.pl line 13, <STDIN> …Run Code Online (Sandbox Code Playgroud)