标签: subroutine

批处理脚本子例程:传递参数

我的理解是,为了从作为参数传递到子例程的文件中获取日期,必须将该参数重新设置为子例程中的变量.它是否正确?这对我来说没有,所以我想知道我是不是完全明白发生了什么.除了日期提取之外,我几乎可以在任何其他子例程代码中使用传入的参数.

set setupEXE=setup.exe

CALL :SUB_CheckCorrectDate %setupEXE%
GOTO EOF
::----------------------------------

:SUB_CheckCorrectDate
set filename=%1%

:: SUCCESSFUL
for %%x in (%filename%) do set FileDate=%%~tx
@For /F "tokens=1-3 delims=-/ " %%A in ('@echo %FileDate%') do @( 
Set file_Month=%%A
Set file_Day=%%B
Set file_Year=%%C
)

:: GET ERROR    
for %%x in (%1%) do set FileDate=%%~tx
@For /F "tokens=1-3 delims=-/ " %%A in ('@echo %FileDate%') do @( 
Set file_Month=%%A
Set file_Day=%%B
Set file_Year=%%C
)    

GOTO:EOF

:: ------------------
:EOF
Run Code Online (Sandbox Code Playgroud)

arguments batch-file argument-passing subroutine

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

将正则表达式传递给perl子例程

情况

我正在创建一个简单的模板文件,这将有助于创建未来的脚本,以便通过*nix系统上的命令行执行各种任务.作为其中的一部分,我可能要求用户输入需要根据源代码中提供的正则表达式进行验证的数据.

问题

当我尝试通过命令行运行Perl代码时,会开始生成错误.我试图将正则表达式传递给repeat子例程,我不确定如何正确执行此操作.我知道我可以使用eval执行一个字符串,但是由于约定,这是我想要避免的.

错误:

Use of uninitialized value $_ in pattern match (m//) at scripts/template line 40.
Use of uninitialized value $resp in concatenation (.) or string at scripts/template line 37.
Run Code Online (Sandbox Code Playgroud)

代码:

#!/usr/bin/env perl

use strict;
use warnings;
use Cwd;
use Term::ANSIColor;
use Data::Dumper;

my $log = "template.log";
my $task = "template";
my $cwd = getcwd();
my $logPath = $cwd . "/". $log;

print ucfirst($task) . " utility starting...\n";
system("cd ~/Desktop");
system("touch " . $log);
&writeLog("Test");

sub …
Run Code Online (Sandbox Code Playgroud)

regex parameters perl function subroutine

10
推荐指数
2
解决办法
5341
查看次数

为什么子程序在 raku 中的“返回”映射中使用时无法访问动态变量?

似乎 aasub在映射内部使用时无法访问动态变量并且该映射被“返回”。

考虑这段代码:

sub start {
    my $*something = 'foobar';
    
    # WORKS
    say 'first say-something:';
    say-something;
    
    # WORKS
    say 'mapped say-something, no return:';
    my @foo = (^2).map({say-something});
    
    # ERROR: Dynamic variable $*something not found
    say 'mapped say-something, with return:';
    return (^2).map({say-something});
}

sub say-something {
    say $*something;
    1
}

start;
Run Code Online (Sandbox Code Playgroud)

这将输出:

first say-something:
foobar
mapped say-something, no return:
foobar
foobar
mapped say-something, with return:

Dynamic variable $*something not found
  in sub say-something at main.raku line 18
  in block …
Run Code Online (Sandbox Code Playgroud)

subroutine rakudo dynamic-variables raku

10
推荐指数
1
解决办法
113
查看次数

在Perl子程序中使用标签被认为是一种不好的做法吗?

我发现在Perl子程序中使用标签,从多个循环中断,或者用更新的变量重做某些部分,非常有帮助.社区如何看待这种编码风格?在子程序中使用标签不受欢迎吗?

perl label coding-style subroutine

9
推荐指数
3
解决办法
3535
查看次数

Fortran是否通过函数和子例程调用保留内部变量的值?

经过多次痛苦的调试后,我相信我已经找到了Fortran的一个独特属性,我想在stackoverflow验证这里.

我一直注意到的是,至少,内部逻辑变量的值在函数或子程序调用中保留.

这是一些示例代码来说明我的观点:

PROGRAM function_variable_preserve
IMPLICIT NONE

CHARACTER(len=8) :: func_negative_or_not ! Declares function name
INTEGER :: input
CHARACTER(len=8) :: output

input = -9

output = func_negative_or_not(input)
WRITE(*,10) input, " is ", output
10 FORMAT("FUNCTION: ", I2, 2A)

CALL sub_negative_or_not(input, output)
WRITE(*,20) input, " is ", output
20 FORMAT("SUBROUTINE: ", I2, 2A)

WRITE(*,*) 'Expected negative.'


input = 7
output = func_negative_or_not(output)
WRITE(*,10) input, " is ", output

CALL sub_negative_or_not(input, output)
WRITE(*,20) input, " is ", output

WRITE(*,*) 'Expected positive.'

END PROGRAM …
Run Code Online (Sandbox Code Playgroud)

fortran scope function subroutine

9
推荐指数
1
解决办法
6666
查看次数

我如何内联Perl子程序?

我正在阅读代码完成2,其中一个要点是关于创建子程序,即使对于看起来太简单而无法拥有自己的子程序的操作,以及它如何有用.

我知道我可以使用关键字在C和C++中内联函数inline.但我从未想过在Perl中内联子程序的方法.

有没有办法告诉Perl解释器内联子程序调用(或为什么不)?

perl inline subroutine

9
推荐指数
2
解决办法
6817
查看次数

Perl修改子例程中的哈希引用

我无法理解哈希引用并更改哈希值,而不是返回它.我想编写一个子例程,它将从哈希返回一个值并修改哈希值.在编写代码时我遇到了一些问题.所以,我编写了以下基本代码来理解修改哈希的位置.

#!/usr/local/bin/perl
#Check hash and array references
#Author: Sidartha Karna
use warnings;
use strict;
use Data::Dumper;

sub checkHashRef{
   my ($hashRef, $arrVal) = @_;
   my %hashDeref = %{$hashRef};

   $hashDeref{'check'} = 2;           
   push(@{$arrVal}, 3);

   print "There:" ;
   print Dumper $hashRef;      
   print Dumper %hashDeref;           
   print Dumper $arrVal

}


my %hashVal = ('check', 1);
my @arrVal = (1, 2);

checkHashRef(\%hashVal, \@arrVal);

print "here\n";
print Dumper %hashVal;
print Dumper @arrVal;
Run Code Online (Sandbox Code Playgroud)

观察到的输出是:



    There:$VAR1 = {
          'check' => 1
        };
    $VAR1 = 'check';
    $VAR2 = 2;
    $VAR1 …
Run Code Online (Sandbox Code Playgroud)

perl hash subroutine

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

在fortran中INTERFACE块和MODULE过程之间的区别是什么?

我对在模块中使用接口块以及使用CONTAINS语句为模块内部的过程创建"显式接口"感到困惑.

我通常使用模块内的接口块编写一个过程.例如,

    MODULE ModExample
    INTERFACE 
        SUBROUTINE Sumatory(a, b, c)
            IMPLICIT NONE

            INTEGER, INTENT(IN)::a
            INTEGER, INTENT(OUT)::b
            INTEGER, INTENT(OUT)::c
        END SUBROUTINE Sumatory
    END INTERFACE
    END MODULE ModExample

   SUBROUTINE Sumatory(a, b, c)
      IMPLICIT NONE

      INTEGER, INTENT(IN)::a
      INTEGER, INTENT(OUT)::b
      INTEGER, INTENT(OUT)::c

      !Executable statements here

   END SUBROUTINE Sumatory
Run Code Online (Sandbox Code Playgroud)

这对我有用.但它也可以使用模块内部的CONTAINS语言编写,实际上这就是我参考过的Fortran书籍中编写示例程序的方法.

MODULE ModExample

CONTAINS

SUBROUTINE Sumatory(a, b, c)
    IMPLICIT NONE

    INTEGER, INTENT(IN)::a
    INTEGER, INTENT(OUT)::b
    INTEGER, INTENT(OUT)::c

    !Executable statements here

END SUBROUTINE Sumatory
END MODOULE ModExample
Run Code Online (Sandbox Code Playgroud)

那么INTERFCE块有什么问题呢?两者都是等效结构吗?我应该使用哪两种方法?也许所有这些问题都可以用一个很大的"它取决于"来回答,但我希望你能解释一下它们之间的差异.提前致谢.

fortran module interface procedure subroutine

9
推荐指数
1
解决办法
3723
查看次数

Fortran中函数和子例程之间有什么区别?

我的印象是,Fortran中子程序和函数之间的主要区别在于函数返回值,而子程序更改了作为参数传递的部分或全部值.但后来我了解到你可以修改传入函数的变量作为参数.我很困惑,也找不到它们之间差异的好参考.

那么,这两种结构之间有什么区别,何时以及为什么一种优先于另一种?

fortran function subroutine

9
推荐指数
1
解决办法
2693
查看次数

Perl v5.18的排序是否理解词法子程序?

这在Perl v5.22中得到修复.


Perl v5.18的词法子程序是否有排序?我今天终于有了一个用途,我有一个复杂的排序例程,它依赖于数据结构中的当前位置来查看更深的部分.

这是一个小程序:

use v5.18;
use feature qw(lexical_subs);
no warnings qw(experimental::lexical_subs);

my sub by_numbers { $a <=> $b }

my @sorted = sort by_numbers qw( 4 8 2 3 0 5 7 6 1 9 );

say "sorted: @sorted";
Run Code Online (Sandbox Code Playgroud)

显然sort对此一无所知,因为它仍然在寻找%main::命名子例程:

% perl5.18.2 test.pl
Undefined sort subroutine "main::by_numbers" called at test.pl line 7.

% perl5.20.1 test.pl
Undefined sort subroutine "main::by_numbers" called at test.pl line 7.
Run Code Online (Sandbox Code Playgroud)

我有点失望,因为这是rjbs 在perl 5中的法子例程中使用的第一个用例.


这部分并不重要,因为我查看了当前版本的测试而不是v5.18版本. …

perl subroutine lexical perl5.18

9
推荐指数
1
解决办法
310
查看次数