Arrays 如何将一列电子邮件从html文本区域获取到数组中
我想我可以自己做,但我需要一些帮助 我需要将本地bands邮件列表中的电子邮件地址列表粘贴到textarea中,并在我的Perl脚本中处理它们 电子邮件都在一列中;以换行符分隔:Arrays 如何将一列电子邮件从html文本区域获取到数组中,arrays,perl,Arrays,Perl,我想我可以自己做,但我需要一些帮助 我需要将本地bands邮件列表中的电子邮件地址列表粘贴到textarea中,并在我的Perl脚本中处理它们 电子邮件都在一列中;以换行符分隔: email1@email.com email2@email.com email3@email.com email4@email.com email5@email.com 很明显,我想去掉任何空白: $emailgoodintheory =~ s/\s//ig; 我正在对它们进行基本验证: if (Email::V
email1@email.com
email2@email.com
email3@email.com
email4@email.com
email5@email.com
很明显,我想去掉任何空白:
$emailgoodintheory =~ s/\s//ig;
我正在对它们进行基本验证:
if (Email::Valid->address($emailgoodintheory)) { #yada
我尝试了各种方法将列表放入数组中
my $toarray = CGI::param('toarray');
my @toarraya = split /\r?\n/, $toarray;
foreach my $address(@toarraya) {
print qq~ $address[$arrcnt]<br /> ~:
$arrcnt++;
}
my$toarray=CGI::param('toarray');
my@toarraya=split/\r?\n/,$toarray;
foreach我的$address(@toarraya){
打印qq~$地址[$arrcnt]
~:
$arrcnt++;
}
以上只是为了测试我是否成功。我不需要打印它们。
它只是循环浏览,获取schedules.txt文件,并向每个成员发送band时间表。所有其他的东西都能工作,但我无法将textarea放入数组中
所以,正如你所看到的,我很迷路
谢谢,先生,我可以再上一课吗?您对Perl似乎有点陌生,因此我将向您详细解释为什么您的代码不好以及如何改进它: 1命名约定: 我看到这似乎是符号代码,但
$emailgoodintheory
的可读性远不如$emailgoodintheory
或$email\u good\u理论上的
。选择任何方案并坚持下去,只是不要写所有小写字母
我想,$emailgoodintheory
包含一个电子邮件地址。然后应用regexs/\s//g
或音译tr/\s/
就足够了;空格字符不区分大小写
使用模块验证地址是一个非常好的主意。:-)
2个Perl数据类型
Perl有三种类型的变量:
标量可以保存字符串、数字或引用。它们由$
符号表示
数组可以保存一个有序的标量序列。它们由@
符号表示
散列可以保存无序的标量集。有些人倾向于把它们称为双核细胞。所有键和值都必须是标量。散列由%
符号表示
上下文一词:从散列/数组中获取值/元素时,必须将sigil更改为所需的数据类型。通常,我们只恢复一个值(始终是标量),因此您可以编写$array[$i]
或$hash{$key}
。这不遵循任何参考文献,因此
my $arrayref = [1, 2, 3];
my @array = ($arrayref);
print @array[0];
不会打印123
,但会打印数组(0xABCDEF)
,并向您发出警告
Perl中的3个循环:
你的循环语法很奇怪!可以使用C样式循环:
for (my $i = 0; $i < @array; $i++)
其中,。
是范围运算符(在列表上下文中),而$#数组
给出了数组的最高可用索引。我们还可以使用foreach循环:
注意,在Perl中,for和foreach的关键字可以互换
4您的循环的作用:
关于引用语法的注意事项:虽然qq~quoted~
绝对合法,但这是我今天看到的最模糊的代码。标准的引号“
就足够了,当使用qq
时,试着使用一些括号(({[address($address)){
#抱怨,死,你决定
#我建议:
打印“无效地址»$address«
”;
下一个
}
打印“$address
\n”;
#发那封电子邮件
}
永远不要忘记使用strict;使用warnings;或者可能使用utf8对不起,我确实意识到我的$var名称到处都是,但是,我想每个人都知道我在键入什么。混乱的版本或者:如何不编写Perl:
(;){$\r=[split ms\r?\ns,CGI::param('toarray');$\u=$$$\u->[$I++]||last;s;\s;;g;next if!Email::Valid->address($);print.“$\uq,q.qq;\n;;}
谢谢你,谢谢你和……谢谢你。你解释得很好,我完全理解你的例子。我求助于尝试我在别处找到的例子,因为我想不出来。我是否应该再次陷入困境,;-)…我会先到这里。@primehunter326chomp
在地址中有空格时是无用的,比如foo@example.com
。CGI.pm没有一个内置函数来拆分字段本身。正确的替代方法如下:子拆分字段{my($field)=@;返回拆分m/\015?\012/,CGI::param($field);}
直接使用CRLF字节。(\n
是特定于平台的)我没有考虑过数据字段中的空白问题,但它是一个web表单,所以任何事情都有可能发生。而且我说chomp删除了空白,它没有,只是在换行符后面。我无法再编辑我的原始评论,所以我删除了它。
for my $i (0 .. $#array)
foreach my $element (@array)
foreach my $address(@toarraya) {
print qq~ $address[$arrcnt]<br /> ~:
$arrcnt++;
}
foreach my $address (@toarraya){
print "$address<br/>\n";
}
my @addressList = split /\r?\n/, CGI::param('toarray');
foreach my $address (@addressList) {
# eliminate white spaces
$address =~ s/\s//g;
# Test for validity
unless (Email::Valid->address($address)) {
# complain, die, you decide
# I recommend:
print "<strong>Invalid address »$address«</strong><br/>";
next;
}
print "$address<br/>\n";
# send that email
}