例如,在下面的情况下,我不想$infilename在初始化后更改程序中任何位置的值.
my $infilename = "input_56_12.txt";
open my $fpin, '<', $infilename
or die $!;
...
print "$infilename has $result matches\n";
close $fpin;
Run Code Online (Sandbox Code Playgroud)
确保$infilename结果中的任何更改不仅仅是警告而是错误的正确方法是什么?
我很难理解哈希的引用和解引用是如何工作的.
我有一个3级的哈希定义如下:
%languages = (
'en', (
'it', ( 'pattern1', '...', 'pattern2', '...' )
'de', ( 'pattern1', '...', 'pattern2', '...' )
)
'it', (
'en', ( 'pattern1', '...', 'pattern2', '...' )
'de', ( 'pattern1', '...', 'pattern2', '...' )
)
'de', (
'en', ( 'pattern1', '...', 'pattern2', '...' )
'it', ( 'pattern1', '...', 'pattern2', '...' )
)
);
Run Code Online (Sandbox Code Playgroud)
并希望迭代第一级哈希之一的第二级,如下所示:
my $current_language = 'de';
while ( ( my $language, my $patterns ) = each %{ $languages{ $current_language } } )
{
print …Run Code Online (Sandbox Code Playgroud) use PDF::Extract;
$pdf=new PDF::Extract( PDFDoc=>"test.pdf");
$i=1;
$i++ while ( $pdf->savePDFExtract( PDFPages=>$i ) );
Run Code Online (Sandbox Code Playgroud)
我试图理解上面的Perl代码.它似乎是从模块中实例化一个对象.调用构造函数的行中的参数是什么?什么=>意思?它是一个哈希参数吗?
如何理解Perl中的这种价值?
my %opt = ( _argv => join?" ",@ARGV),_cwd = cwd()).
Run Code Online (Sandbox Code Playgroud)
是_argv和_cwd两个字符串?
如果我=>在数组结构中使用my $arr = [ a => b ];,那么它是一样的my $arr = [a, b];吗?(实际上我在这里有一个不相关的问题,为什么用这种方式初始化数组不需要带arr前缀@?)
资料来源:http://www.misc-perl-info.com/perl-operators.html
如果这是真的,那么perl是否有充分的理由拥有这个看似模糊的功能?
来自perlootut:
my $cage = File::MP3->new(
path => 'mp3s/My-Body-Is-a-Cage.mp3',
content => $mp3_data,
last_mod_time => 1304974868,
title => 'My Body Is a Cage',
);
Run Code Online (Sandbox Code Playgroud)
我不明白这里发生了什么.它看起来是自动生成,如果是这样,那么new会传递类名和对新哈希的引用吗?
在要求我维护的一些Perl代码中,我遇到了以下构造:
myArray => ['id1', 'id2', 'id3', 'id4']
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了一些定义/解释,但我所能找到的只是对标量哈希的引用:
https://www.guru99.com/perl-tutorials.html
这是我遇到的实际代码的片段:
$config = eval {
XMLin(
$inFile,
MyArray => [
'id1', 'id2',"id3", 'id4'
]
);
};
Run Code Online (Sandbox Code Playgroud)
散列整个数组(不包含散列值)的语法是什么意思?