我已经使用Perl一段时间了,但今天我遇到了这段代码:
sub function1($$)
{
//snip
}
Run Code Online (Sandbox Code Playgroud)
这在Perl中意味着什么?
给出一个Perl包Foo.pm,例如
package Foo;
use strict;
sub bar {
# some code here
}
sub baz {
# more code here
}
1;
Run Code Online (Sandbox Code Playgroud)
如何编写脚本来提取每个sub的文本源代码,从而产生一个哈希:
$VAR1 = {
'bar' => 'sub bar {
# some code here
}',
'baz' => 'sub baz {
# more code here
}'
};
Run Code Online (Sandbox Code Playgroud)
我希望文本与包,空白和所有内容完全一致.
谢谢.
我在Perl中运行一个程序,它在一个点上评估从子程序中调用的if语句中的数据,例如
sub check_good {
if (!good) {
# exit this subroutine
# restart program
}
else {
# keep going
}
} # end sub
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是退出并重新启动.我知道我可以exit 0;直接退出,但显然这是不正确的,如果我想回到开头.我尝试调用基本上启动程序的子程序,但是当它运行时它将再次回到这一点.我想把它放在while循环中,但这意味着将整个文件放在循环中,这将是非常不切实际的.
我实际上并不知道这是否可行,所以任何输入都会很棒.
我只是难以置信地看着这个序列:
my $line;
$rc = getline($line); # read next line and store in $line
Run Code Online (Sandbox Code Playgroud)
我一直都知道Perl参数是通过值传递的,所以每当我需要传入一个大型结构,或者传入一个变量来进行更新时,我都通过了一个ref.
但是,在perldoc中读取精细打印,我已经知道@_由参数列表中提到的变量的别名组成.读取下一位数据后,getline()返回$ _ [0] = $ data; ,将$数据直接存储到$ line.
我喜欢这个 - 就像在C++中通过引用传递一样.但是,我还没有找到为$ _ [0]分配更有意义的名称的方法.有没有?
好吧,我想知道如何从命令行调用perl子例程.因此,如果我的程序被称为测试,并且子程序被称为字段,我想从命令行调用它.
测试领域
您可以使用以下示例中的两种语法调用子例程作为方法.
但您也可以不将其作为对象调用.
#====================================================
package Opa;
sub opa{
$first= shift;
$second= shift;
print "Opa $first -- $second\n";
}
package main;
# as object:
Opa->opa("uno");
opa Opa ("uno");
# not as object
Opa::opa("uno","segundo");
Opa::opa("Opa","uno");
#====================================================
Run Code Online (Sandbox Code Playgroud)
有一种方法,从子程序内部,知道"一般",子接收了什么样的调用?
什么是Perl 6方法来区分没有显式签名的块中的参数和无参数之间的区别?我没有任何实际用途,但我很好奇.
没有显式签名的块将值放入$_:
my &block := { put "The argument was $_" };
Run Code Online (Sandbox Code Playgroud)
签名实际上是;; $_? is raw.这是一个可选参数.该@_变量不是在块定义的,因为没有明确的签名.
没有参数,$_未定义的地方:
&block(); # no argument
Run Code Online (Sandbox Code Playgroud)
但是也存在一个$_未定义的论证情况.类型对象始终未定义:
&block(Int);
Run Code Online (Sandbox Code Playgroud)
但是,$_其中没有任何东西实际上是一个Any(而不是说,Nil).我无法区分这两种情况:
&block();
&block(Any);
Run Code Online (Sandbox Code Playgroud)
这是一个较长的例子:
my $block := {
say "\t.perl is {$_.perl}";
if $_ ~~ Nil {
put "\tArgument is Nil"
}
elsif ! .defined and $_.^name eq 'Any' {
put "\tArgument is an Any type object"
}
elsif $_ …Run Code Online (Sandbox Code Playgroud) 我希望脚本运行从模块导出的子例程,而导出的子例程将在脚本中作为MAIN运行。该子例程执行我想要的所有操作,除了它返回结果而不是打印结果。
RUN-MAIN 似乎可以达到我的目标,但是我不确定如何获取例程的返回值。
有什么方法可以捕获要打印的RUN-MAIN例程的输出?RUN-MAIN是否适合这种事情?
我是 Fortran 新手。我正在尝试编写一个子程序,它将从主程序中接收四个参数,然后向主程序输出一个包含最初传入的四个参数的数组。有什么好的/聪明的方法可以做到这一点?
例如,在我下面的测试程序,我创建四个实际变量(a,b,c,并d在主程序)。然后我将这些实际变量传递给一个名为mysub. 我希望mysub能够接收a, b, c, 和d,使用它们来填充一个名为 的 2×2 数组o,然后发送o到主程序以在那里显示(和可能的修改)。所以,我尝试了以下方法:
SUBROUTINE mysub(w,x,y,z)
IMPLICIT NONE
REAL, INTENT(IN) :: w, x, y, z
REAL, DIMENSION(:,:), ALLOCATABLE, INTENT(OUT) :: o
ALLOCATE(o(2,2))
o(1,1)=w
o(1,2)=x
o(2,1)=y
o(2,2)=z
END SUBROUTINE mysub
END MODULE testsubs
PROGRAM test
USE testsubs
IMPLICIT NONE
REAL :: a=1.1, b=2.2, c=3.3, d=4.4
CALL mysub(a, b, c, d)
PRINT *, …Run Code Online (Sandbox Code Playgroud) 我正在学习 Java,有一些事情困扰着我,教科书没有解释它。
我知道您使用修饰符来声明类和所有内部的方法。但我突然上了一堂课,宣布像
static void(){
}
Run Code Online (Sandbox Code Playgroud)
为什么没有 public 或 private 修饰符,它仍然有效?我可以避免在其他地方使用 public 修饰符吗,或者它是如何工作的?我知道静态意味着该类的成员,而它不返回值则表示无效。然而,为什么不是公共或私人的。