Perl 如何在两个条件之间连接线
我列出了一个自定义清理phonebook.vcf文件的程序 我不知道如何将从Perl 如何在两个条件之间连接线,perl,Perl,我列出了一个自定义清理phonebook.vcf文件的程序 我不知道如何将从/^NOTE.+://开始到/X-ACCOUNT.*://结束之间的所有内容放入单个字符串变量中。请考虑是否存在我希望保留的未来联系人格式: ADR;WORK;X-SYNCMLREF507891:;;NUENSCfff STRASSE 3-5;RIESCHWEILER;;66509;Germania ORG:aaaa & CO. KG NOTE;ENCODING=QUOTED-PRINTABLE:Hall 3
/^NOTE.+://
开始到/X-ACCOUNT.*://
结束之间的所有内容放入单个字符串变量中。请考虑是否存在我希望保留的未来联系人格式:
ADR;WORK;X-SYNCMLREF507891:;;NUENSCfff STRASSE 3-5;RIESCHWEILER;;66509;Germania
ORG:aaaa & CO. KG
NOTE;ENCODING=QUOTED-PRINTABLE:Hall 30 F35=0A*ddddd@jggggine.com =0A014 =
EURO =0A*kkkk@ggggne.com =0A=
Bjjj@rrrLINE.COM
X-ACCOUNT:Local Phone Account;Phone
可能使用任何foreach循环。但我不能只连接我需要的,然后停在正确的位置:
foreach $in (<IN>){
if($in =~ /^NOTE.*:|=$/){
unless($in =~ /^[A-Z]+:/){
$in =~ s/(.+=$)\n//;
$inn .= $1;
}
}
$a = $a;
foreach$in(){
如果($in=~/^NOTE.*:|=$/){
除非($in=~/^[A-Z]+:/){
$in=~s/(.+=$)\n/;
$inn=$1;
}
}
$a=$a;
}
有什么建议吗?或多或少:
$inn .= $in if (($in =~ /^NOTE/ .. $in =~ /^X-ACCOUNT/) && $in !~ /^X-ACCOUNT/);
使用implicit$\uu
将使其更短,也许:
while(<IN>) {
$inn .= $_ if (/^NOTE/ .. /^X-ACCOUNT/ and !/^X-ACCOUNT/);
while(){
$inn.=$\uIf(/^NOTE/./^X-ACCOUNT/和!/^X-ACCOUNT/);
请参阅,或者也可以解释为什么
和的优先级低于&&
少一行,可能更容易理解:添加一个标志,指示“当前在变量中累积行”
$contracting=0;
每台美元(){
如果($in=~/^NOTE/){
美元=1;
}
如果($in=~/^X-账户:/){
美元=0;
#可能:添加一些使用$inn执行某些操作的代码
}
如果(累计){
$inn.=$in;
}
}
也许可以让这更容易些?
$accumulating = 0;
foreach $in (<IN>){
if ($in =~ /^NOTE/) {
$accumulating = 1;
}
if ($in =~ /^X-ACCOUNT:/) {
$accumulating = 0;
# possibly : add some code which does something with $inn
}
if ($accumulating) {
$inn .= $in;
}
}