我有这个Perl代码:
foreach (@tmp_cycledef)
{
chomp;
my ($cycle_code, $close_day, $first_date) = split(/\|/, $_,3);
$cycle_code =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
$close_day =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
$first_date =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
#print "$cycle_code, $close_day, $first_date\n";
$cycledef{$cycle_code} = [ $close_day, split(/-/,$first_date) ];
}
tmp_cycledef
的值来自SQL查询的输出:
select cycle_code,cycle_close_day,to_char(cycle_first_date,'YYYY-MM-DD')
from cycle_definition d
order by cycle_code;
for
循环中究竟发生了什么?
答案 0 :(得分:2)
看起来这个人写的是试图修剪每个字段的前导和尾随空格。这是一个非常奇怪的方式,并且由于某种原因,尽管他的锚定,他过分关注每个领域的内部空白。
我认为这应该与修剪split中分隔符周围的空白一样:
foreach (@tmp_cycledef)
{
s/^\s+//; s/$//; #leading and trailing whitespace on the whole string
my ($cycle_code, $close_day, $first_date) = split(/\s*\|\s*/, $_, 3);
$cycledef{$cycle_code} = [ $close_day, split(/-/,$first_date) ];
}
考虑split
的关键是考虑要丢弃字符串的哪些部分,而不仅仅是将所需字段分开的部分。
答案 1 :(得分:0)
对于正则表达式部分,s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/
会删除前导和尾随空格
答案 2 :(得分:0)
@tmp_cycledef
中的每一行都由在“cycle_code | close_day | first_date”之后格式化的字符串组成。
my ($cycle_code, $close_day, $first_date) = split(/\|/, $_,3);
将字符串分成三部分。以下正则表达式用于去除前导和尾随空格。
循环的最后一条指令在由$cycledef
索引的字典$cycle_code
中创建一个条目。格式化的条目使用以下方案格式化:
[ $close_day, YYYY, MM, DD ]
其中$first_date = "YYYY-MM-DD"
。
答案 3 :(得分:0)
@tmp_cycledef
:sql查询的输出存储在此数组
foreach (@tmp_cycledef)
:对于此数组中的每个元素。
chomp :
从每个元素的末尾删除\ n char。
my ($cycle_code, $close_day, $first_date) = split(/\|/, $_,3);
将元素分成3个部分,并将变量分配给每个分裂元素。拆分的部分是“拆分(/ PATTERN /,EXPR,LIMIT)”
$cycle_code =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
$close_day =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
$first_date =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
这个正则表达式部分是从每个变量中截取前导和尾随空格。
答案 4 :(得分:-1)
天哪,自从我读过perl以来已经很久了......但是我会试一试。
你从@tmp_cycledef中获取一条记录,然后在结尾处删除换行符,并将其拆分为三个变量:然后,就像S.Mark所说的那样,每个替换正则表达式都会删除每个变量的前导空格和尾随空格。三个变量。最后,将值作为列表推送到哈希中,并在其上方注释掉一些调试代码。
HTH
答案 5 :(得分:-1)
@tmp_cycledef
。foreach
(@tmp_cycledef)
。chomp
。split
行(不是
在$_
)管道上并分配
前3件到$cycle_code
,
$close_day
和$first_date
分别%cycledef
。关键用途是
$cycle_code
,价值是
第一个元素是的数组
$close_day
和其他元素
分裂后得到的碎片
连字符$first_date
。