Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将一列电子邮件从html文本区域获取到数组中_Arrays_Perl - Fatal编程技术网

Arrays 如何将一列电子邮件从html文本区域获取到数组中

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

我想我可以自己做,但我需要一些帮助

我需要将本地bands邮件列表中的电子邮件地址列表粘贴到textarea中,并在我的Perl脚本中处理它们

电子邮件都在一列中;以换行符分隔:

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
包含一个电子邮件地址。然后应用regex
s/\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;;}
谢谢你,谢谢你和……谢谢你。你解释得很好,我完全理解你的例子。我求助于尝试我在别处找到的例子,因为我想不出来。我是否应该再次陷入困境,;-)…我会先到这里。@primehunter326
chomp
在地址中有空格时是无用的,比如
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
}