相关疑难解决方法(0)

在Perl中查找数组的大小

我似乎遇到了几种不同的方法来查找数组的大小.这三种方法有什么区别?

my @arr = (2);
print scalar @arr; # First way to print array size

print $#arr; # Second way to print array size

my $arrSize = @arr;
print $arrSize; # Third way to print array size
Run Code Online (Sandbox Code Playgroud)

perl

235
推荐指数
6
解决办法
56万
查看次数

我和Perl之间的区别是什么?

我知道myPerl中有什么.它定义了一个仅存在于定义它的块范围内的变量.怎么our办?有our什么不同my

perl scope

184
推荐指数
7
解决办法
11万
查看次数

为什么要使用严格和警告?

在我看来,如果人们使用以下内容,可以解决Perl标签中的许多问题:

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

我认为有些人认为这些类似于训练轮子或不必要的并发症,这显然不是真的,因为即使是非常熟练的Perl程序员也会使用它们.

似乎大多数精通Perl的人总是使用这两个pragma,而那些从使用它们中获益最多的人很少这样做.所以,我认为这将是一个好主意,有一个问题联系起来,鼓励人们时至use strictwarnings.

那么,为什么一个Perl的开发use strictwarnings

perl

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

为什么 Perl 中的默认范围行为是这样的?

我正在为学校学习 Perl,目前正在学习my关键字的使用和 Perl 中的范围界定。(作为参考,我正在查看如何在 Perl 中使用“我的”关键字?

在我看来,C 风格的默认作用域最有意义……您在块内声明一个变量,该变量存在于该块内,一旦离开该块,该变量将不再可访问。为什么在 Perl 中,要指定这种行为,必须使用my关键字?似乎将变量的范围限制在使用它的地方将是良好的标准行为,并且一直使用my似乎非常多余,并且会导致代码混乱。

似乎有点像走进杂货店,在继续购物之前立即大声宣布您喜欢的某某品牌,以防万一您周围的人好奇(他们可能不是)。

(可能重复,这个问题可能会被删除......为什么在文件范围内用“my”声明 Perl 变量?。)

perl scope language-design

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

在Perl中,"$ a"和"$ b"在sort()函数之外有什么特殊用途吗?

sort()几天我问了一个关于在Perl 函数中使用"$ a"和"$ b"的问题:

Perl的"sort()"函数究竟是什么"$ a"和"$ b"?

我现在有一个跟进问题.是"$ a"和"$ b"仅使用sort()或是否有任何其他Perl函数利用这些特殊的全局变量?

或者即使没有其他功能使用它们,是否还有其他情况sort()你会使用"$ a"或"$ b"?

编辑:

澄清:

简而言之,问题是"$ a"和"$ b"可以被其他东西使用sort()吗?

我只是想知道他们可以使用的其他情况.我从未见过其他任何东西使用的"$ a"或"$ b",并且想知道除了之外还有其他任何特殊用途sort().

perl global-variables lexical-scope

3
推荐指数
1
解决办法
214
查看次数

如何做 Perl 状态机(FSM)来解析比特流(字节序列)?

我目前正在使用 Perl 来解析来自 RS232 串行端口的传入命令序列。我尝试使用状态机,它的预期行为是:(1)从串口接收一系列字节;(2) 状态机使用字节作为输入,并跳转到适当的状态。

我想出了一个简化的演示Perl代码(贴在下面),但是遇到了一个问题: 当代码进入“while(1){}”时,就卡在这里,出不来。 因此,$din 字节序列分配被“while(1){}”阻止,并且对状态机不可见。因此,FSM 卡在“INIT”状态,根本不跳转。

我认为这应该是 Perl 编码中一个非常简单或入门级的练习,但是通过 Google 搜索并没有太大帮助。谁能帮我这个?先谢谢了~

...
my %next_state = (
        "INIT" => sub{
                $din eq "AA" and return "HEADER0" ;
                return "INIT"                     ;
                },
        "HEADER0" => sub{
                $din eq "99" and return "HEADER1" ;
                return "INIT"                     ;
                },
        ...
        );

# Set state machine's initial state.
my $cur_state = "INIT"   ;

# Integer for debugging purpose.
my $itgi = 0;

# Run the state machine. …
Run Code Online (Sandbox Code Playgroud)

perl parsing byte command fsm

3
推荐指数
1
解决办法
76
查看次数