もしメール送信プログラム作成に挑戦してみたい方は、ご参考に、こんな感じです。
ただしこれはアンケートフォームからデータを入手してデータ保存するもので、
電子メールアドレスが妥当かどうかのエラールーチンやメール送信のは省いています。
実際はもっと長いです。
#! /usr/local/bin/perl

require "./mimew.pl";
require "./cgi-lib.pl";
&ReadParse();


#    ********* 変 数 の 定 義 状 況 *********
# $d[0] 名前  $d[1] メールアドレス  $d[2] 性別  $d[3] 年齢  $d[4] 問題


# form.htmlより受取ったデータを変数に代入
$d[0]=$in{'name'};
if($in{'mail_1'} eq "" and $in{'mail_2'} eq ""){$d[1]="";}else{$d[1]=$in{'mail_1'}."@".$in{'mail_2'};}
$d[2]=$in{'sex'};
$d[3]=$in{'tosi'};
$d[4]=$in{'q1'};

# 送信時間の取得と変数代入
$time=time;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat)=localtime $time;
$year += 1900;
$mon +=1;
$accessday=$year."/".$mon."/".$mday;
$accesstime=$hour.":".$min.":".$sec;
$d[5]="送信日: ".$accessday." "."送信時間: ".$accesstime;

# 未入力チェック 性別と問題はHTMLで初期値が設定されているので空白はありえないのではぶく
if($d[0] eq ""){$error[0]="お名前を入力して下さい";}
if($d[1] eq ""){$error[1]="メールアドレスを入力して下さい";}
if($d[3] eq ""){$error[3]="年齢を入力して下さい";}

#エラーメッセージを全部つないで
$error=$error[0].$error[1].$error[3];

# エラーが無いときの処理
if($error eq ""){

# データをカンマ区切りにしてdata.csvに保存
$data=join(",",$d[0],$d[1],$d[2],$d[3],$d[4],$d[5])."\n";
open(FH,">>./data.csv");
print FH $data;
close FH;

# 保存が完了した旨をユーザーに知らせるHTMLを作成
print <<END;
content-type: text/html

<HTML>
<HERD><TITLE>送信完了</TITLE></HERD>
<BODY>
<H2>送信内容を受取りました</H2>
</BODY>
</HTML>
END

}
else
{
print <<END;
content-type: text/html

<HTML>
<HERD><TITLE>登録内容エラー</TITLE></HERD>
<BODY>
<H2>登録内容に不備があります。戻るボタンで戻り再登録して下さい</H2>
</BODY>
</HTML>
END

}