小编Rob*_*arl的帖子

是否必须存在用于创建包的文件夹名称的文件夹?

我们正在考虑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像这样使用).

perl package

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

如果我要在Perl中使用纯OO,我是否需要Exporter?

文档(Exporter和perlmodlib)说:

作为一般规则,如果模块试图面向对象,则不输出任何内容.

但是perlmodlib也说:

标准的捆绑模块在命名空间污染方面都应该以明确定义的方式运行,因为它们使用Exporter模块.

所以我想知道,如果你去OO并且没有出口,你真的需要出口商吗?如果你不这样做,这是否意味着在这个意义上没有一个标准模块是严格的OO,或者它是否意味着它们是EXPORT_OK某些东西,因为如果有人想继承你的模块你需要这样做?(这是真的吗?)或者您是否需要出口商才能够use MyModule; ... = new MyModule

oop perl module perl-module exporter

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

Foreach on Perl中的哈希变量

我是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)

为什么值随机排序?或者这种随机性背后的逻辑是什么?请澄清我的疑问.

perl hash foreach

4
推荐指数
2
解决办法
939
查看次数

将字符串解析为哈希

我有一个字符串:

<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.

regex perl parsing

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

如何增加NSTableHeaderView的高度?

我需要实现headerview具有特定大小和渐变的.我必须在headerview.Tried的某些单元格中插入图像,以便headerview使用以下代码创建单元格,但我无法自定义headerview.

[[tableColumn headerCell] setImage:[NSImage imageNamed:@"sampleHeader"]];

如果我使用headerview的重写子类,我无法在标题单元格中查看图像或文本.请提供任何指针来解决此问题.

 

我能够通过子类化插入图像和文本.NSTableHeaderCell如何增加高度NSTableHeaderView


如果我子类均NSTableHeaderViewNSTableHeaderCell,没能在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

macos cocoa objective-c nstableview nstableheaderview

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

如何将Perl调试器输出限制为我自己脚本中的行?

我在非交互模式下运行调试器,输出写入文件.我想在执行时打印出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)

perl

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

如何从perl中的所有数组元素中减去1

我有一个包含值的数组.我需要从每个数组元素中减去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

3
推荐指数
2
解决办法
1045
查看次数

如何避免打印额外信息

在我的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

2
推荐指数
1
解决办法
57
查看次数

使用Perl XML :: Simple时"错误形成"错误

我正在尝试运行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上运行此脚本.

xml perl xml-simple

2
推荐指数
1
解决办法
4862
查看次数

使用已更改的变量重用SQL表达式

我有一个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)

sql perl

2
推荐指数
1
解决办法
97
查看次数