for ループで Net::SMTP を使用すると問題が発生します。最初の反復は機能しますが、2 回目の反復で、スクリプトは Can't call method "mail" on an undefined value at... で終了します。
$smtp->mail('hacker@hacker.net'); #from.
何か案は?!御時間ありがとうございます!
use strict;
use warnings;
use Net::SMTP;
my $smtp;
#@data is defined and populated somewhere
foreach my $line (@data) {
  my @linearray = split /,/, $line;
  my $host = $linearray[2];
  $host =~ s/\r|\n//g;
  next unless ($host =~  m/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}).([0-9]{1,3})/); # skip if it's not an IP (i.e. it's the header row)
  print "Connecting to $host...";
  # create object
  $smtp = Net::SMTP->new(
    Hello => 'hacker.net',
    Timeout => 3,
    Host => $host,
    Debug => 1,
  );
  $smtp->mail('hacker@hacker.net'); #from
  my $tocheck = $smtp->recipient('my_email@sanitised.com'); #to
  if ($tocheck == 0) {
    print "$host is NOT an open relay\n";
    #$smtp->quit;
    next;
  }
  $smtp->data();
  $smtp->datasend("Test\n");
  $smtp->datasend("\n");
  $smtp->datasend("A simple test message\n");
  $smtp->dataend();
  $smtp->quit;
}