标签: subroutine

我什么时候应该使用子程序属性?

我根本没有grol Perl子程序属性.

我从未在实际代码中看到它们perldoc perlsub而且perldoc attributes未能回答我的问题:

  • 什么属性有用?
  • 他们为Perl最佳实践中尚未提供的内容带来了什么?
  • 是否有任何使用属性的CPAN模块(众所周知的或其他方式)?

如果有人能够以他们应该的方式使用属性的详细示例,那将会很棒.


对于那些和我一样无能为力的人,属性是attributes SYNOPSIS下面例子中冒号后面的参数:

sub foo : method ;
my ($x,@y,%z) : Bent = 1;
my $s = sub : method { ... };

use attributes ();  # optional, to get subroutine declarations
my @attrlist = attributes::get(\&foo);

use attributes 'get'; # import the attributes::get subroutine
my @attrlist = get \&foo;
Run Code Online (Sandbox Code Playgroud)

perl subroutine

22
推荐指数
2
解决办法
2369
查看次数

Excel VBA从另一个sub调用sub,具有多个输入,不同大小的输出

我想在同一个模块中调用另一个子内部的子.第一个子将是我的主要代码,在那里我将调用第二个子例程.第二个子程序接收多个输入,如整数,双,双数组和双矩阵.数组和矩阵的大小是已知的并存储在整数变量中.该子也返回几个输出.所以,我想做这样的事情.

sub Main()
    Nc As integer
    Dim kij(1 To Nc, 1 To Nc), xi(1 to Nc), a1 As Double
    'I assign values to my variables from the excelsheet e.g. Nc=Cells(1,1) etc.

    CalculateA(Nc,kij, xi, a1, a)
    Cells(5,5)=a
end sub

sub CalculateA(Nc as integer,kij as matrix double, xi as array double, a as Double)
    a=0
    For i=1 To Nc
       For j=1 To Nc
          a = a + kij(i,j)*x(i)*x(j)
       Next j
    Next i
    a = a*a1
end sub
Run Code Online (Sandbox Code Playgroud)

它是如何知道哪个子元素是它开始运行的主要子元素.我可以将辅助子设置在顶部,代码以某种方式从底部子例程开始吗?

excel vba input subroutine

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

在Perl中,如何检查导入给定函数的模块?

我有一个调用该函数的代码.但我不知道这个功能属于哪个模块.我需要它来修改这个功能.

我怎么检查呢?

perl module function subroutine

20
推荐指数
3
解决办法
3318
查看次数

如何将哈希传递给子例程?

需要帮助搞清楚如何做到这一点.我的代码:

my %hash;
$hash{'1'}= {'Make' => 'Toyota','Color' => 'Red',};
$hash{'2'}= {'Make' => 'Ford','Color' => 'Blue',};
$hash{'3'}= {'Make' => 'Honda','Color' => 'Yellow',};


&printInfo(%hash);

sub printInfo{
   my (%hash) = %_;
   foreach my $key (keys %_{       
    my $a = $_{$key}{'Make'};   
    my $b = $_{$key}{'Color'};   
    print "$a $b\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

perl hash subroutine

20
推荐指数
4
解决办法
4万
查看次数

为什么我要使用Perl匿名子程序而不是命名子程序?

我只是好奇为什么会选择在Perl中使用匿名子程序而不是命名子程序.谢谢.

perl anonymous subroutine

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

如何导出Perl包中的所有subs?

我想将所有subs暴露给我的命名空间,而不必一次列出一个:

@EXPORT = qw( firstsub secondsub third sub etc );
Run Code Online (Sandbox Code Playgroud)

使用完全限定名称需要对现有代码进行大量更改,因此我宁愿不这样做.

有没有@EXPORT_ALL?

我认为文档说这是一个坏主意,但无论如何我还是想做,或者至少知道如何做.

为了回答Jon的原因:现在为了快速重构,我想将一堆sub转移到他们自己的包中,对现有脚本进行最少的麻烦和代码更改(这些子当前使用并经常重复).

而且,大多数情况下,我只是好奇.(因为看起来出口商似乎也可以将其作为标准功能,但到目前为止基于答案有点令人惊讶,但事实并非如此)

perl export function subroutine

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

如何创建一个接受代码块的Perl子例程

我有一组子程序,如下所示:

sub foo_1($) {
  my $name = shift;
  my $f; 

  run_something();
  open($f, $name) or die ("Couldn't open $name");
  while (<$f>) {
    //Something for foo_1()
  }
  close($f); 
  do_something_else();

}
Run Code Online (Sandbox Code Playgroud)

我有四个或更多看起来相同,唯一改变的是while块的主体.我想抽象一下并停止复制粘贴代码.

  • 有没有办法编写一个接受代码块并执行它的子程序?

为了给出更多的上下文,不同的foo子程序是一个不同的有限状态机(FSM),它读取不同文件的内容并将数据提供给哈希引用.也许比我想要完成的事情更聪明.

perl arguments subroutine

18
推荐指数
3
解决办法
4460
查看次数

如何在PowerShell中定义子例程

RemoveAllFilesByExtenstion例如,在C#中,子程序可以是这样的符号:

void RemoveAllFilesByExtenstion(string targetFolderPath, string ext)
{
...
}
Run Code Online (Sandbox Code Playgroud)

和使用像:

RemoveAllFilesByExtenstion("C:\Logs\", ".log");
Run Code Online (Sandbox Code Playgroud)

如何使用PowerShell脚本文件(ps1)中的相同签名来定义和调用子例程?

powershell subroutine

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

如何抽出未定义的子程序?

我想扫描一个代码库,以识别目前无法访问的未定义子例程的所有实例.

举个例子:

use strict;
use warnings;

my $flag = 0;
if ( $flag ) {
  undefined_sub();
}
Run Code Online (Sandbox Code Playgroud)

意见

  • $flag计算结果为true时,将发出以下警告:

    Undefined subroutine &main::undefined_sub called at - line 6
    
    Run Code Online (Sandbox Code Playgroud)

    我不想依赖于在运行时发出的警告来识别未定义的子例程

  • strictwarnings编译指示不帮助这里.use strict 'subs'没有效果.

  • 甚至以下代码片段也是静默的

    $ perl -Mstrict -we 'exit 0; undefined_sub()'
    
    Run Code Online (Sandbox Code Playgroud)

perl subroutine

18
推荐指数
1
解决办法
295
查看次数

在perl中,用默认参数调用多个子程序是不好的做法吗?

我正在学习perl并且理解使用shift解包子例程参数是一种常见且公认的做法.我也理解省略函数参数以使用默认@_数组是常见且可接受的做法.

考虑到这两件事,如果你调用一个没有参数的子程序,就@_可以改变can(并且如果使用shift).这是否意味着使用默认参数调用另一个子例程,或者事实上,@_在此之后使用数组,这被认为是不好的做法?考虑这个例子:

sub total { # calculate sum of all arguments
    my $running_sum;
    # take arguments one by one and sum them together
    while (@_) {
       $running_sum += shift;
    }
    $running_sum;
}

sub avg { calculate the mean of given arguments
    if (@_ == 0) { return }
    my $sum = &total; # gets the correct answer, but changes @_
    $sum / @_ # causes division by zero, since @_ is now empty
} …
Run Code Online (Sandbox Code Playgroud)

perl shift subroutine

17
推荐指数
1
解决办法
1650
查看次数

标签 统计

subroutine ×10

perl ×8

function ×2

anonymous ×1

arguments ×1

excel ×1

export ×1

hash ×1

input ×1

module ×1

powershell ×1

shift ×1

vba ×1