2012-04-17 6 views
0

私はファイルに書き込むPerlスクリプトを書こうとしていて、linuxのmailコマンドを使ってPerlスクリプトが書いたものをファイルに送ります。 私のコードは次のとおりです:Perlがパスファイルに書き込み、次にunixのメールを使って送信

my $pathfile='some_pathfile'; 
open(W_VAR,">>$pathfile"); 
print W_VAR 'hello'; 
close W_VAR; 

my $email_command='mail -s'." header".' some_email_address'.' <'." $pathfile"; 
system($email_command); 

問題がpathfileの内容が送信されれることは決してありませんということです。 私が個人的にそのファイルに記入しても問題ありませんが、perlが書いたものは単に送信されません。チェックするとコンテンツがファイルにあります。

何が問題ですか?

+0

あなたが実際に使用したコードの関連部分を含めてください。 – Joni

+0

'open(W_VAR、" >> "、" $ pathfile ")を試してください。 printf( "%s \ n"、$ filepathを開くことができません); - エラーが発生したかどうかを確認してください – scibuff

+0

は最初の行に一重引用符がないようです。 – JoelFan

答えて

2

私は問題はあなたのプログラムが改行"\n"文字で行を終了していないということである疑いがあります。手動でファイルを編集したときにファイルに入れられるのは間違いありませんか?

何かこれを修正するかもしれませんが、手にするためのLinuxボックスがありませんので、私はそれをテストできません。

use strict; 
use warnings; 

my $pathfile = 'path/to/file'; 
open my $w_var, '>>', $pathfile or die $!; 
print $w_var "Hello\nWorld!\n"; 
close $w_var; 

my $email_command = "mail -s header some\@emailaddress.com < $pathfile"; 
system $email_command; 

編集

しかし、Mail::Sendmailようなものを使用してはるかに良くなります。 Email::Senderははるかに優れていますが、その依存関係とともに、それは非常に単純なタスクのための巨大なモジュールであり、私はここでそれを推薦することを躊躇します。

次のようになりMail::Sendmailを使用するコード:

use strict; 
use warnings; 

use Mail::Sendmail; 

my $pathfile = 'path/to/file'; 

open my $w_var, '>>', $pathfile or die $!; 
print $w_var "Hello\n", "World!\n"; 

my $message = do { 
    open $w_var, '<', $pathfile or die $!; 
    local $/; 
    <$w_var>; 
}; 

sendmail(
    To => '[email protected]', 
    From => '[email protected]', 
    Message => $message, 
) 
or die $Mail::Sendmail::error; 
+0

それは間違いなく改行でした。どうやら、改行演算子は自然にそれが改正ラインであると思うだろうということよりも明らかです。混乱する。 –

+0

'Email :: Sender'の+1は本当に素晴らしいオブジェクト指向のインターフェイスを提供します。 –

+0

@Nikhil Jain:それは非常に素晴らしいツールですが、ああ、それらの依存関係! 'Capture :: Tiny'' Carp' 'Cwd'' Email :: Abstract' 'Email :: Address'' Email :: Simple' 'Fcntl'' 'File :: Basename'' '::ファイル:: Find'' ::ファイル::パス'' File :: Temp'' '' :: File :: Temp' '' Find :: Thinable :: Error'' '::ファイル名::ファイル名::ファイル名::ファイル名::ファイル名::ファイル名:試して::小さな。 「ムース」自体は巨大です。 。 。 – Borodin

1

私の賭けはあなたのコマンドがうまく形成されていないということです。

試してみてください。

my $header = "My Subject"; 
my $some_email_address = "[email protected]"; 
my $email_command="mail -s \"$header\" $some_email_address < $pathfile"; 
関連する問題