我们正在考虑Perl项目中的公共代码.一个主程序应分成几个可重用的模块.
我们的程序名称validate_results.pl
包含一组验证命令.我们计划将其拆分为小模块,因此validate_results.pl
应该像:
use Common::Validate_Results;
use Common::Validate_Results::CommonCommands;
use Common::Validate_Results::ReturnCodeValidation;
...
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我应该创建一个Common文件夹,并且Validate_Results.pm
应该存在.再次下Common
,Validate_Results
应该创建文件夹,并在其下面CommonCommands
,ReturnCodeValidation
文件夹应该存在.
是否必须存在所有这些文件夹,或者我们是否可以将所有Perl程序放在一个文件夹中并对它们进行逻辑分组,并仍然使用上述方法来访问模块(比如common::validate_results
像这样使用).
文档(Exporter和perlmodlib)说:
作为一般规则,如果模块试图面向对象,则不输出任何内容.
但是perlmodlib也说:
标准的捆绑模块在命名空间污染方面都应该以明确定义的方式运行,因为它们使用Exporter模块.
所以我想知道,如果你去OO并且没有出口,你真的需要出口商吗?如果你不这样做,这是否意味着在这个意义上没有一个标准模块是严格的OO,或者它是否意味着它们是EXPORT_OK
某些东西,因为如果有人想继承你的模块你需要这样做?(这是真的吗?)或者您是否需要出口商才能够use MyModule; ... = new MyModule
?
我是Perl脚本的新手,foreach
对哈希变量有疑问.我想打印哈希值的所有值.这是一个程序:
%colors = (a => 1, b=>2, c=>3, d=>4, e=>5);
foreach $colors(keys %colors)
{
print "$colors{%colors} \n";
}
Run Code Online (Sandbox Code Playgroud)
输出是:
5
3
1
2
4
Run Code Online (Sandbox Code Playgroud)
为什么值随机排序?或者这种随机性背后的逻辑是什么?请澄清我的疑问.
我有一个字符串:
<https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5>;
rel="next",
<https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5>;
rel="first",
<https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5>;
rel="last"
Run Code Online (Sandbox Code Playgroud)
所以格式是
(<val>; rel="key")*
Run Code Online (Sandbox Code Playgroud)
我想用以下格式将其解析为哈希:
next => https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5
first => https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5
last => https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5
Run Code Online (Sandbox Code Playgroud)
在Java中,我将使用正则表达式模式来提取每个key => value对并将它们放入映射中.模式将是这样的:
<([^>]++)>;\s*rel="([^"]++)"
Run Code Online (Sandbox Code Playgroud)
哪个会给我第二个匹配组中的键和第一个匹配组中的值.同样的方法是实现这一目标的最好方法是Perl,还是我能做些什么?
PS我之所以使用Perl而不是Java的原因是服务器没有Java.
我需要实现headerview
具有特定大小和渐变的.我必须在headerview
.Tried的某些单元格中插入图像,以便headerview
使用以下代码创建单元格,但我无法自定义headerview
.
[[tableColumn headerCell] setImage:[NSImage imageNamed:@"sampleHeader"]];
如果我使用headerview的重写子类,我无法在标题单元格中查看图像或文本.请提供任何指针来解决此问题.
我能够通过子类化插入图像和文本.NSTableHeaderCell
如何增加高度NSTableHeaderView
?
如果我子类均NSTableHeaderView
和NSTableHeaderCell
,没能在headercell.I查看什么用下面的代码来设置headerview和headercell
[tableView setHeaderView:CustomHeaderView];
[tableColumn setHeaderCell:[[[CustomHeaderTableCell alloc] initImageCell:
[NSImage imageNamed:@"sample"]]autorelease]];
我有与下面的网址相同的问题
http://lists.apple.com/archives/cocoa-dev/2002/Jun/msg00331.html
我在非交互模式下运行调试器,输出写入文件.我想在执行时打印出Perl脚本的每一行,但只打印脚本本身的行.我不想看到脚本调用的库代码(File :: Basename,Exporter :: import等).这似乎应该很容易做到,但perldebug的文档只讨论限制倾销结构的深度.我想要的是什么,如果是的话,怎么样?
请注意,我正在执行我的程序,如下所示:
PERLDB_OPTS="LineInfo=temp.txt NonStop=1 AutoTrace=1 frame=2" perl -dS myprog.pl arg0 arg1
Run Code Online (Sandbox Code Playgroud) 我有一个包含值的数组.我需要从每个数组元素中减去1并保存它自己.
例如:
chop $tve_005;
@words = split (/,/, $tve_005);
Run Code Online (Sandbox Code Playgroud)
现在@words
包含:
524210
1713409
311919
1422134
16658312
Run Code Online (Sandbox Code Playgroud)
但是在其余代码中需要使用的实际值是:(总是减去1)
524209
1713408
311918
1422133
16658311
Run Code Online (Sandbox Code Playgroud)
如何减去并保存相同的数组.
在我的Perl代码中,我使用了以下行:
$host=$hostname if ($host eq undef);
Run Code Online (Sandbox Code Playgroud)
在输出中我得到以下消息:
Use of uninitialized value $host in string eq at cli.pl line 18.
Run Code Online (Sandbox Code Playgroud)
虽然我没有使用strict
.如何避免在输出上打印此消息?
我正在尝试运行Perl脚本以将xml文档的所有元素都放入数组中.代码如下:
#!/usr/bin/perl
# Script to illustrate how to parse a simple XML file
# and dump its contents in a Perl hash record.
use strict;
use XML::Simple;
my $xs = new XML::Simple();
my $booklist = $xs->XMLin('./cmn_msg.xml');
print Dumper($data);
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我收到一个错误:
Use of tied on a handle without * is deprecated at C:/Perl/lib/XML/Parser/Expat.pm line 447.
not well-formed (invalid token) at line 4, column 14, byte 128 at C:/Perl/lib/XML/Parser.pm line 187
Run Code Online (Sandbox Code Playgroud)
我正在使用为MSWin32-x86-multi-thread构建的ActivePerl(v5.14.1).我试图在Win7上运行此脚本.
我有一个Perl DBI语句
my $sql_statement = "select c.* ".
"from meter_category c ".
"where c.category = ".$current_category." ".
"and c.effective_date <= ".
$DBHdl->quote($time_stamp)." ".
"and c.meter_size = ".$meter_size." ".
"order by c.effective_date desc ; ";
Run Code Online (Sandbox Code Playgroud)
$DBHdl
是一个Informix数据库句柄.
声明如下:
select c.*
from meter_category c
where c.category = 1
and c.effective_date <= '09/20/2013'
and c.meter_size = 0.63
order by c.effective_date desc ;
Run Code Online (Sandbox Code Playgroud)
在我的函数中的某个时刻,我想设置$current_category
为2,然后修改$ sql_statement.
后
$current_category = 2;
eval $sql_statement
Run Code Online (Sandbox Code Playgroud)
不会改变$ sql_statement,所以c.category = 2
.
有没有办法执行替换,还是我必须重新发布声明?
我使用以下代码为$ current_category的每个值准备和执行查询.
my $ptSelHdl …
Run Code Online (Sandbox Code Playgroud) perl ×9
cocoa ×1
exporter ×1
foreach ×1
hash ×1
macos ×1
module ×1
nstableview ×1
objective-c ×1
oop ×1
package ×1
parsing ×1
perl-module ×1
regex ×1
sql ×1
xml ×1
xml-simple ×1