是否可以foreach在Perl中使用单行循环?
$hash{$thing}++ foreach my $thing (@things);
Run Code Online (Sandbox Code Playgroud)
我知道这可能与许多其他命令,如,
die "Invalid file!\n" if (open($Handle, "file.txt"));
Run Code Online (Sandbox Code Playgroud)
我知道开放的声明可能会破坏:)
我有一个声明
$set eq "Y" ? $set = "N" : $set = "Y";
Run Code Online (Sandbox Code Playgroud)
但无论它总是如何设定 "N"
# Toggle setting
if ($set eq "Y")
{
$set = "N";
}
else
{
$set = "Y";
}
Run Code Online (Sandbox Code Playgroud)
为什么一个班轮看起来不起作用?
我需要做的就是将无符号的两字节数组转换为整数.我知道,我知道,Java没有无符号数据类型,但我的数字是假装无符号字节.
byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];
Run Code Online (Sandbox Code Playgroud)
问题是没有正确转换,因为它认为那些是有符号的字节...如何将其转换回int?
我在EXT2文件系统中打开了超级块和组描述符,但我不知道如何读取例如根目录或其中的文件...
这是我得到的一些东西
fd=open("/dev/sdb2", O_RDONLY);
lseek(fd, SuperSize, SEEK_SET);
read(fd, &super_block, SuperSize);
lseek(fd, 4096, SEEK_SET);
read(fd, &groupDesc, DescriptSize);
Run Code Online (Sandbox Code Playgroud)
但是下一部分似乎不起作用......
lseek(fd, super_block.s_log_block_size*groupDesc.bg_inode_table, SEEK_SET);
lseek(fd, InodeSize*(EXT2_ROOT_INO-1), SEEK_CUR);
read(fd, &root, InodeSize);
Run Code Online (Sandbox Code Playgroud) 我正在尝试对文件的哈希工作,并且工作必须按特定顺序完成.大多数人会说列表可以像这样订购:
for my $k (sort keys %my_hash)
{
print "$k=>$my_hash{$k}, ";
}
Run Code Online (Sandbox Code Playgroud)
不过,我需要非字母顺序,其实按键与一个字开始,然后_和他们去G到digits以L任何的M,P,R,T or D(例如word_G.txt,word_2.txt,..., word_P.txt).有没有办法按自定义顺序排序?
我今天早上在代码审查中遇到了一些错误的代码,但我不明白为什么.
$line =~ /^[1-C]/;
Run Code Online (Sandbox Code Playgroud)
这行被假设为评估为1和之间的十六进制字符C,但我认为这一行不会这样做.问题不在于匹配,但这匹配的是什么?我可以打印出角色类中的所有角色吗?像下面的东西?
say join(', ', [1-C]);
Run Code Online (Sandbox Code Playgroud)
唉,
# Examples:
say join(', ', 1..9);
say join(', ', 'A'..'C');
say join(', ', 1..'C');
# Output
Argument "C" isn't numeric in range (or flop) at X:\developers\PERL\Test.pl line 33.
1, 2, 3, 4, 5, 6, 7, 8, 9
A, B, C
Run Code Online (Sandbox Code Playgroud) 我在运行脚本时遇到了这个问题,它似乎错过了一些依赖关系,但是如下所示。安装缺少的库后,这没有任何意义。
[ericfoss@maverick-fossum-ddns-net packages]$ python -c "import utils"
[ericfoss@maverick-fossum-ddns-net packages]$ python -c "import requests"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 64, in <module>
from . import utils
ImportError: cannot import name utils
[ericfoss@maverick-fossum-ddns-net packages]$
Run Code Online (Sandbox Code Playgroud)
知道为什么utils可以导入,但requests不能导入吗?
module.pm
package module;
use 5.012;
use warnings;
sub Parse
{
return 1;
}
1;
Run Code Online (Sandbox Code Playgroud)
script.pl
#!/usr/bin/perl -w
use 5.012;
use warnings;
use lib 'C:/';
use module;
print Parse("value");
Run Code Online (Sandbox Code Playgroud)
标准输出
Undefined subroutine &main::Parse
Run Code Online (Sandbox Code Playgroud) 我想创建一个类似grep {} @或map {} @可以处理代码和/或布尔输入的子例程.不知何故互联网没有太多的信息.
我尝试在下面创建子,但它甚至无法处理第一次测试.我收到了错误Can't locate object method "BoolTest" via package "input" (perhaps you forgot to load "input"?) at C:\path\to\file.pl line 16..
这怎么认为它是一个对象?我没有正确创建BoolTest吗?
# Example senarios
BoolTest { 'input' =~ /test[ ]string/xi };
BoolTest { $_ =~ /test[ ]string/xi } @array;
BoolTest(TRUE);
# Example subroutine
sub BoolTest
{
if ( ref($_[0]) == 'CODE') {
my $code = \&{shift @_}; # ensure we have something like CODE
if ($code->()) { say 'TRUE'; } else …Run Code Online (Sandbox Code Playgroud) 我有一个我需要测试的设备的输出,主要是响应是一行,但有时它是两行.我用简单的正则表达式处理一行或两行来处理
if ($prompt =~ /(\s.*?)\r\n(.*)/)
{
Note('Multiline '.$string);
TestPrompt($string, $1);
TestPrompt($string, $2);
}
else
{
TestPrompt($string, $prompt);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果响应超过两行呢?这段代码无法处理额外的行,我想在我的设计中保持健壮.有没有办法从正则表达式中捕获foreach?
perl ×7
foreach ×2
regex ×2
arguments ×1
byte ×1
c ×1
ext2 ×1
filesystems ×1
hash ×1
if-statement ×1
java ×1
perl-module ×1
prompt ×1
python ×1
python-2.7 ×1
sorting ×1
subroutine ×1
testing ×1