标签: subroutine

函数声明"sub function($$)"是什么意思?

我已经使用Perl一段时间了,但今天我遇到了这段代码:

sub function1($$)
{
   //snip
}
Run Code Online (Sandbox Code Playgroud)

这在Perl中意味着什么?

perl prototype subroutine

6
推荐指数
2
解决办法
2845
查看次数

如何编写Perl脚本来提取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 parsing extract package subroutine

6
推荐指数
2
解决办法
1149
查看次数

在Perl中有没有办法重启当前正在运行的程序?

我在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循环中,但这意味着将整个文件放在循环中,这将是非常不切实际的.

我实际上并不知道这是否可行,所以任何输入都会很棒.

perl exit subroutine

6
推荐指数
1
解决办法
3995
查看次数

perl子例程参数列表 - "通过别名"?

我只是难以置信地看着这个序列:

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]分配更有意义的名称的方法.有没有?

parameters perl arguments pass-by-reference subroutine

6
推荐指数
1
解决办法
590
查看次数

从命令行调用perl子例程

好吧,我想知道如何从命令行调用perl子例程.因此,如果我的程序被称为测试,并且子程序被称为字段,我想从命令行调用它.

测试领​​域

perl subroutine

6
推荐指数
3
解决办法
8361
查看次数

如何检查是否使用对象调用方法调用子例程

您可以使用以下示例中的两种语法调用子例程作为方法.

但您也可以不将其作为对象调用.

#====================================================
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 object subroutine method-invocation

6
推荐指数
1
解决办法
135
查看次数

对于Perl 6块,这是一个参数还是没有?

什么是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)

arguments subroutine perl6

6
推荐指数
1
解决办法
188
查看次数

我可以捕获RUN-MAIN中使用的例程的返回值吗?

我希望脚本运行从模块导出的子例程,而导出的子例程将在脚本中作为MAIN运行。该子例程执行我想要的所有操作,除了它返回结果而不是打印结果。

RUN-MAIN 似乎可以达到我的目标,但是我不确定如何获取例程的返回值。

有什么方法可以捕获要打印的RUN-MAIN例程的输出?RUN-MAIN是否适合这种事情?

program-entry-point subroutine raku

6
推荐指数
2
解决办法
116
查看次数

在 Fortran 90 中传递参数的智能方法

我是 Fortran 新手。我正在尝试编写一个子程序,它将从主程序中接收四个参数,然后向主程序输出一个包含最初传入的四个参数的数组。有什么好的/聪明的方法可以做到这一点?

例如,在我下面的测试程序,我创建四个实际变量(abc,并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)

fortran argument-passing subroutine fortran90

5
推荐指数
1
解决办法
2万
查看次数

在 Java 方法中省略 public 修饰符

我正在学习 Java,有一些事情困扰着我,教科书没有解释它。

我知道您使用修饰符来声明类和所有内部的方法。但我突然上了一堂课,宣布像

static void(){
}
Run Code Online (Sandbox Code Playgroud)

为什么没有 public 或 private 修饰符,它仍然有效?我可以避免在其他地方使用 public 修饰符吗,或者它是如何工作的?我知道静态意味着该类的成员,而它不返回值则表示无效。然而,为什么不是公共或私人的。

java methods class subroutine

5
推荐指数
1
解决办法
8578
查看次数