in reply to Re: System Command Issues
in thread System Command Issues

Followed your advice to the letter. I get a message sent page as I should, but the message never arrives. Any thoughts?

Replies are listed 'Best First'.
Re^3: System Command Issues
by tlm (Prior) on Jun 08, 2005 at 21:09 UTC

    That sounds to me like a bad e-mail address. If the e-mail address was given in a double-quoted string, did you escape (i.e. backslash) the @? (If not, in addition to doing that, you should be running this under strict, because under strict an unescaped @ in a double-quoted string would have most likely caused the compilation to fail, thereby alerting you to the problem; it's a good thing to do in general.) And, as ikegami noted, what are the strings in $Version and $ID?

    BTW, I tried a similar short script, and it worked fine; this is what I ran:

    use strict; use warnings; my $address = 'myaddress@myhost.com'; my $subject = 'nothing'; system( "mail $address -s $subject < random.txt" ) == 0 or die "mail failed: $?";

    the lowliest monk

      Hmm. I've tried that code as well. The "strict" and "warnings" commands are very helpful indeed. It's pointing out some mysterious errors on a particular line:

      Possible unintended interpolation of @whatever in string at myscript.pl line 158.
      Possible unintended interpolation of @whatever in string at myscript.pl line 158.
      Global symbol "@whatever" requires explicit package name at myscript.pl line 158.
      Global symbol "@whatever" requires explicit package name at myscript.pl line 158.
      Execution of myscript.pl aborted due to compilation errors.

      The line in question is a simple print command immediately following the last line of the code I am posting. Line 157 is the system() command causing all the trouble...

      use strict; use warnings; my $address = 'myemail@whatever.com'; my $subject = 'Comments Version: $version ID: $ID'; # backslash the @ sign in the address $address =~ s/@/\\$1/g; system( "mail $address -s $subject < blah6.txt" ) == 0 or die "mail failed: $?";

      By the way, $ID is a 10-character alphanumeric string, and $version is something like "5.3" or "5.4" or "Nightly" (sans quotes, of course).

      Any thoughts? I appreciate all the help so far, by the way. I'm a self-professed perl newb, and can use all the suggestions I can get. Thanks!

      --blanket

        This should work

        use strict; use warnings; my $address = 'myemail@whatever.com'; my $subject = "Comments Version: $version ID: $ID"; system( "mail $address -s '$subject' < blah6.txt" ) == 0 or die "mail failed: $?";
        I made three changes to the code you posted:
        1. Eliminated the s/// line since escaping is required only in a double-quoted context, but above the @ is being given in a single-quoted context, so no variable interpolation occurs.
        2. I put the RHS of the assignment to $subject in double quotes, because in this case we do want interpolation (of $Version and $ID).
        3. In the argument to system I put $subject in single quotes, because otherwise the shell would interpret the various words in $subject as different arguments, as opposed to the single argument for -s
        This is definitely a little quoting workout! You may want to read the docs on quoting, to best make sense of the above.

        the lowliest monk