トップページ⇒php
1001コメント349KB

Perl 初心者コーナー Part22

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/04/15 10:15ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。


CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
055254203/05/04 00:34ID:???
>>548 selectも関係ないよな〜??

>>549
まだ何も解決してないyo!
たとえば、
「Perl サブルーチン集」
ttp://www.antun.net/tips/cgi/perl.html
ここにあるget_homepageをcgiファイル上にコピペして
(すこしバグ修正して)動くようにする。
で、get_homepageを別のplファイルにカット&ペースト。
するとアラ不思議。
select(SOCKET); $|=1; select(stdout);から先が動かねええぇっ!!
なぜ?
0553nobodyさん03/05/04 00:35ID:???
>>550
間違ってるからできないんだろうよ
レンタルカウンターとか考えてみ
0554nobodyさん03/05/04 00:37ID:???
SSIで別鯖の呼び出しできたっけ?
まぁ、スレ違いなのだが。
0555nobodyさん03/05/04 00:38ID:???
>>552
>関数をplファイルに移し変えたとたん
だからどこか間違ってるんだろ。
一部分だけ書いてなぜって聞かれて誰がわかるってんだ。
055654203/05/04 00:42ID:???
>>555
たとえば何が考えられるの?
最初からソース全部アップするのもアレでしょ。
0557nobodyさん03/05/04 00:44ID:???
>>556
どこかコーディング間違えてるしかないじゃん
0558nobodyさん03/05/04 00:46ID:???
>>550
>exec cgi
できないよ。includeでも使いな。
055954203/05/04 00:56ID:???
>>557
たとえばどういうとこが?

ちなみに
select(SOCKET); $|=1; select(stdout);
のあたりはWebページ読み込みの紋切り型の処理の一部のようだから
判る人にはわかるにちがいないと思ったんだよ〜。

もしかしたらpl化するときのFAQ的なことなんじゃないだろうかと思ったので
バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな、とか
そんな話が聞きたかった。
0560nobodyさん03/05/04 01:00ID:???
>>559
>バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな
そんなことはない。
どっちにしても全ソース晒さなければ答えようがない。
0561nobodyさん03/05/04 01:26ID:???
あ、俺思いついちゃった。
.plがCGIとして実行されていないのでは?
どうせsub get_homepageに渡す引数は$ENVから取ってるんでしょ?
空っぽだったりしてね。
0562nobodyさん03/05/04 01:27ID:???
ぐはっ。違うわ。空っぽだったら途中でreturnされるな。>542が変な改造してない限り。
0563連カキすまそ03/05/04 01:30ID:???
いや、待てよ。
>>547を見る限り変な改造してそうだ。
print "0<br>";
の前に
print "$SrcFileName<br>";
print "$host<br>";
print "$port<br>";
print "$addr<br>";
print "$name<br>";
を付け足して.cgi,.pl両方の結果を晒してみろ。
056454203/05/04 01:51ID:???
socket直前の変数の状態。
552のソースで実験したもの。

cgi版
address = http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html
host = www.geocities.co.jp
port = 80
addr = メ兀セ
name = Pメ兀セ

pl版
address = http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html
host = www.geocities.co.jp
port = 80
addr = メ兀セ
name = Pメ兀セ
056554203/05/04 01:53ID:???
cgiソース。
#! /usr/local/bin/perl
require "test2.pl";
use Socket;
{
  # HTMLヘッダ
  print "Content-type: text/html\n\n";
  print '<html><head>'.
    '<meta http-equiv="content-type" content="text/html;charset=x-sjis">'.
    '<title>$strProject</title>'.
    '</head><body>';
  if ( 1 )
  {
    # cgi版
    my $html= get_homepage('http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html');
    print "$html<br>";
  }
  else
  {
    # pl版
    my $html= &test2'get_homepage('http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html');
    print "$html<br>";
  }
  # HTMLフッタ
  print '</body></html>';
  exit;
}
#この後ろにget_homepageが来る
#ただし、return値は $homepage{"body"} にしてある
056654203/05/04 01:55ID:???
plファイル。(test2.pl)
package test2;
use Socket;
$system_agent = 'unknown';

sub get_homepage
{
  # get_homepage
  # ただし、return値は $homepage{"body"} にしてある
}

1;
0567nobodyさん03/05/04 02:13ID:???
>>565
もーめんどくせーから固めてどっかにうpしろ。
0568nobodyさん03/05/04 02:22ID:???
>>542
当然のこと聞くけど、CGIじゃなくてコマンドとして実行したよね?
056925003/05/04 05:40ID:???
多分、拡張子をplに変えただけで動かないので、あるのならば、cgiで自分のファイル名
を指定してるところを書き変えてないとかしょーも無いところでないの?

おおよそ、解ってないんであればソースを全部アプロダなりに上げるぐらいするべきでは?
スレ汚れすぎてみる気もせんわい・・・
0570nobodyさん03/05/04 10:37ID:???
関数をplファイルにしてrequireしたら動かないって言うんじゃ
コーディングミスしかないわな
0571nobodyさん03/05/04 18:11ID:???
あるサンプルスクリプトを見て疑問に思ったことがあるので質問します。

代入された値が数字でないものを
インクリメントするというのはどういうことなのでしょうか?
0572nobodyさん03/05/04 18:29ID:???
あ、>>571は俺の読み間違いだったみたいです。スミマセン
0573nobodyさん03/05/04 20:34ID:???
>>571 マジカルインクリメントのことか?
0574nobodyさん03/05/04 21:17ID:SY2E/p10
use strict;
use Socket;

my $host = 'live2.2ch.net';
my $port = 80;
my $path = '/news/subback.html';

〜省略〜

print SOCKET "GET $path HTTP/1.0\r\n";
print SOCKET "\r\n";

while (<SOCKET>){
m/^\r\n$/ and last; }
print "Content-type: text/html\n\n";
while (<SOCKET>){
print ($_);
}

socketでニュー速のsubback.htmlを取得したいのですが,
変なページに飛ばされてしまいます.
イラク情勢のsubback.htmlは問題なく取得できるのですが・・
どうやったらニュー速のsubback.htmlを取得できるんでしょうか?
0575nobodyさん03/05/04 21:24ID:???
ブラウザで見る時は、
GET /news/subback.html HTTP/1.1
Host: live2.2ch.net
を出してるみたいだね
0576nobodyさん03/05/04 21:33ID:SY2E/p10
>>575
print SOCKET "GET $path HTTP/1.1\r\n";
print SOCKET "Host: live2.2ch.net\r\n";
print SOCKET "\r\n";

こんなふうにしたらできるようになりました.どうもありがとうございました.
0577nobodyさん03/05/04 21:37ID:???
GETでファイルを一つずつ取ってくるのではなく、
複数同時にやって処理を高速化したいと考えています。
forkを使って作ってみたのですが、プロセスの終了を待たずに
forkを繰り返すスクリプトでは、どうしても途中でエラーになってしまいます。
(win2kでActivePerlを使用)

forkを使う何かうまい回避方法か、
forkを使わないなるべく簡単な方法はありませんか?
0578nobodyさん03/05/04 22:44ID:???
>>577
forkのことは全然知らないんだけど、

孫プロセスを作って子プロセスを殺す。
っていうのはどうですか?
0579nobodyさん03/05/04 22:48ID:???
殺し方そのものが判らないですが、
子プロセスのプロセスIDを知ってるのが子プロセスだけなので、
自殺してもらうしかないような気がします。
っていうか、exitはさせてます。でもゴーストが溜まります。
0580nobodyさん03/05/04 22:49ID:???
>>577
wait or zombie
0581nobodyさん03/05/04 22:52ID:???
forkの親プロセス側の戻り値は子プロセスのIDだろ?
Windows2000だと違うのか?
0582bloom03/05/04 23:10ID:c6ZqX6LO
http://homepage.mac.com/ayaya16/
0583nobodyさん03/05/04 23:15ID:digHu/wF
http://www.yahoo2003.com/betu/linkvp2/linkvp.html
0584nobodyさん03/05/04 23:22ID:???
ドキュメントは読んだ?
どのバージョンか知らんが、Windows版ActivePerlのforkは
いくつか注意点あるぞ。
0585nobodyさん03/05/04 23:25ID:???
子プロセス:孫プロセスを生成して終了。
孫プロセス:やりたい処理(GETでファイルをとってくる)。
親プロセス:子プロセスをwait待ちのあと、子をkill。

孫は自分の親を失ったときから孤児になり、あとは孤児院(ていうかOS)が面倒をみてくれる。
と思う。わからんけど。
0586nobodyさん03/05/04 23:55ID:???
>>581
あ、そうですね。なんか逆に思ってた。
unless ($pid = fork()) {子}
という書き方をしたからか。

>>585
forkを二段にするのは、やってみれとどこかに書いてあったので
試してみましたが、結果は同じでした。
そらそうだろうなあ、とその時は納得したのですが、
OSが孫の面倒を見てくれるという背景があるとは知りませんでした。
かなり処理系に依存しそうな話なので、うちでは無理なのかもしれません。

という感じで fork に頼るのは半ば諦めているのですが、
fork 以外の方法もお願いします。
system() で別のperlを呼んじゃうのもアリかな、と考えてますが。
0587nobodyさん03/05/05 00:54ID:???
>>586
system()は確かに別プロセスが立ち上がるが、それが終わるまでwaitする。
従って、今回の目的には使えない。
0588nobodyさん03/05/05 01:22ID:???
そうなんですよね。呼ばれた側で終わったフリとか
できないかな、と思ったんですが。

そうすると、本当に例えば10のソケットを作って、
順番に様子を見ていく、みたいな処理を書かないといけないのかな。
print SOCKET
だけしといて、
<SOCKET>
は後回しにして、whileは使わずにEOFを調べる、みたいな。
0589nobodyさん03/05/05 05:19ID:LXl5aCv3
質問です
htmlで作ったForm(input,textarea,select,radio,submitとか)のデータを
受け取ったり逆にデータ手渡す方法orガイドしてるHPとかないですか?
JavaScriptでは作った事有るんですがやっぱりCGIだとかなり便利だし、
何か知ってる方いらっしゃられたら些細な事でも教えて下さい、、
0590nobodyさん03/05/05 05:42ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0591nobodyさん03/05/05 05:44ID:???
>>589
とりあえずこれ
http://www.google.com/search?as_q=perl+&num=100&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B8%A1%E3%81%99%E6%96%B9%E6%B3%95
0592初心者です03/05/05 10:25ID:MabQ6h0K
教えて頂きたいのですが、
自分が幾つか持っているHPの日記に一度に書き込みをしたいのです。
それでperlで書いてみたんですけど、
foreach $bbslist (@bbs){
print "Location: $bbslist\n\n";
}
@bbsの中身はhttp://〜から記述した内容がget形式で渡されています。

で、このソースを実行すると1つめの日記に書き込みをした時点で、
処理が終わってしまい、次の日記を書きに行ってくれません。
Locationは一度実行すると処理を終えてしまうようなことを
どこかで見かけた気がしますが、それなら、どのように書けばいいのでしょうか?

どなたか教えてください。
0593nobodyさん03/05/05 10:36ID:???
>592
荒らしスクリプトっぽいからダメ。
0594初心者です03/05/05 10:38ID:MabQ6h0K
>>593
ああ、そうなるのですか・・・
言われてみればそうですね。

変なこと尋ねて申し訳ありませんでした。
0595nobodyさん03/05/05 10:44ID:???
LWP
これ以上は言わん。
0596bloom03/05/05 11:10ID:lHdchtO/
http://homepage.mac.com/ayaya16/
0597nobodyさん03/05/05 11:25ID:???
言わなくていいから書け
0598nobodyさん03/05/05 11:43ID:???
すみません超初心者です。
perlをwinにインストールしようと思い、以下のサイトに行きました。
http://www.activestate.com/
英語は全く読めないのですが、勘で進みました。

するとダウンロードの所に2種類あるではありませんか。
ActivePerl 5.8.0 build 806
Windows MSI 11.5MB
Windows AS package 11.4MB

意味が分かりません。
MSIと、ASは、なにが違うのでしょうか?
よろしくお願いします。
0599nobodyさん03/05/05 11:47ID:???
人に聞いてないのに聞いていると書かれた場合はどうすれば良いのでしょうか?

自分はスキルがあるのに実力が発揮しにくいです。
0600nobodyさん03/05/05 11:51ID:???
>>598
ここ、コーディングのスレなんだけど・・・

まぁ、MSIのほうダウンロードしといたらええよ。
で、ダブルクリックしたらインストール始まる。
ただし使ってるWindowsの種類によってはMicrosoftのサイトから
Windows Installerのファイルを落としておかないとインストールできない。

このへんのことは検索したらwindowsマシンへのActivePerlのインストール
方法を解説してるサイト見つかると思うので、あとは自力でがんばって
060159803/05/05 11:56ID:???
>>600
はい!
ありがとうございました!
0602nobodyさん03/05/05 13:11ID:eAEbJzW0
>>591さん
ありがとうございます^^
検索下手には嬉しいHit結果です、お手数かけました〜、
0603_03/05/05 13:25ID:???
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ     
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku07.html
http://japan.pinkserver.com/kaorin/zenkaku/index.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku08.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku10.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku07.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku03.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku05.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku01.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku06.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku04.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku09.html
0604nobodyさん03/05/05 14:35ID:eAEbJzW0
割算した小数点の第4位(1/1000の位)から後ろを切り捨てたいんですけど
文字列に直すと整数の桁数が不安定で1/100から切れたり1/10から切れたりします、
どうすればいいでしょうか?、
0605nobodyさん03/05/05 14:42ID:???
int($a*1000)/1000
0606nobodyさん03/05/05 14:56ID:???
gifカウンタを制作中なんで
他サーバで処理させたカウントを
CGIの動かないサーバに置いてあるページ内にgifをつかって表示させるには
どうしたらいいでしょうか
0607nobodyさん03/05/05 14:58ID:???
>>606
動かないサーバのページからカウンタのリンクを貼ればいいでしょ。
レンタルカウンタと同じ。
0608_03/05/05 15:06ID:???
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://www.japan.pinkserver.com/kaorin/moe/jaz09.html
http://japan.pinkserver.com/kaorin/mona/index.html
http://www.japan.pinkserver.com/kaorin/moe/jaz10.html
http://japan.pinkserver.com/kaorin/moe/jaz08.html
http://www.japan.pinkserver.com/kaorin/moe/jaz07.html
http://japan.pinkserver.com/kaorin/moe/jaz03.html
http://www.japan.pinkserver.com/kaorin/moe/jaz05.html
http://japan.pinkserver.com/kaorin/moe/jaz01.html
http://www.japan.pinkserver.com/kaorin/moe/jaz06.html
http://japan.pinkserver.com/kaorin/moe/jaz04.html
http://www.japan.pinkserver.com/kaorin/moe/jaz02.html
0609bloom03/05/05 15:10ID:lHdchtO/
http://homepage.mac.com/ayaya16/
0610bloom03/05/05 15:10ID:lHdchtO/
http://pc2.2ch.net/mysv/
0611nobodyさん03/05/05 15:47ID:eAEbJzW0
>>605さん
$aはsortのみたいに書き変えないでいい物かと思って失敗しましたけど
違うんですね、、
それにperlにも整数に直すint型が有るんですねー。(C++かじった事有)
これで小数点に悩まされずに済みます、ありがとうございました〜
0612nobodyさん03/05/05 16:03ID:???
でも負数に対しては切り捨てではなく切り上げになる罠
0613nobodyさん03/05/05 16:12ID:???
>>611
int型じゃない。int関数。
0614nobodyさん03/05/05 16:29ID:???
そもそもperlに型は無い
無型流自由殺法
0615nobodyさん03/05/05 17:53ID:???
物凄く初歩的な質問でごめんなさい。
これまで1か0のフラグとして使っていた変数$aの真偽を判定するのに
if($a == 1)
と記述していたのですが、もしかして
if($a)
だけでも良いのでしょうか。良いのならコードがかなりすっきりするんですが…。
良い、悪いだけでも結構ですので、どなたか教えていただけませんでしょうか。
0616nobodyさん03/05/05 17:57ID:???
$a and hoge;
    か
if ($a & 1){ hoge; }

が正解でつ。
0617nobodyさん03/05/05 18:03ID:???
>615
真偽判定だけならそれでもかまわない。

ないとは思うが、
if(1) # 真
if(0) # 偽
if('') # 偽
if('0') # 偽
if('00') # 真
こういうワナもあるので注意。
0618nobodyさん03/05/05 18:38ID:???
$aが文字列で、ヌルでなければ、という意味で
if ($a)
とやると、$a = "0" の罠にはまる。
0619nobodyさん03/05/05 18:40ID:???
ほぼうまくいくけど、ファイル名が "0" だった時だけ
動かないスクリプトとか、普通に出回ってそうだ
0620nobodyさん03/05/05 18:46ID:???
>>619
出回ってないよ
0621nobodyさん03/05/05 19:14ID:???
while ($file = <*>) { }

こんな感じの。うちではちゃんと動くけど。
062261503/05/05 19:38ID:???
皆様、参考になる御意見ありがとうございました。
トラップに陥らないよう注意して、書き直していこうと思います。
0623Dream ☆03/05/05 21:39ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0624nobodyさん03/05/06 01:24ID:???
606です
607さんのいったカウンタのリンクを貼るってどういうことですか?
レンタルカウンタ色々みたけど、どれがどれなのか。。。
0625nobodyさん03/05/06 01:26ID:???
該当するようなスレが思いつかなかったので、ここに質問。
プログラム覚えるのと、英語覚えるのどっちが難しいですか?
両方出来る人が居たら、教えてくだしい
0626nobodyさん03/05/06 01:34ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0627nobodyさん03/05/06 01:36ID:???
http://pc.2ch.net/test/read.cgi/prog/1042377112/

このスレで聞くのがいいんじゃないか?
0628nobodyさん03/05/06 01:41ID:???
ファイルハンドルからファイル名を取得する関数はありますか?
0629nobodyさん03/05/06 02:52ID:???
>>628
ないです
0630nobodyさん03/05/06 18:03ID:39bU8fpC
やばいっす
Perl←の読み方教えてぇーペリ?ピール?
0631nobodyさん03/05/06 18:04ID:39bU8fpC
パールだってよ!チクショー遅かった・・・
0632nobodyさん03/05/06 18:24ID:???
ぺるる でつ。
0633nobodyさん03/05/06 18:36ID:???
>>629
うそついちゃだめだよ
0634nobodyさん03/05/06 20:52ID:???
>>633
じゃあ答えて
0635nobodyさん03/05/06 21:19ID:???
ファイルハンドルは、そもそもファイル名なんか知らないのでは。(…多分)
0636nobodyさん03/05/06 21:32ID:???
$value =~ /[\w\W]/g;
と
$value =~ /./g;
って、同じと考えていい?
なんか違いある?
0637nobodyさん 03/05/06 23:25ID:Bmqf5moK
正規表現に関する質問です。

これ↓を
SELECT * FROM MEMBER WHERE {NAME='[personName]' AND }AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE;

こういう風に
SELECT * FROM MEMBER WHERE AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE;

変換したいのですが下記ではだめなのでしょうか。

/\{.*?\[personName\].*?\}//
0638nobodyさん03/05/06 23:45ID:???
>>637
正規表現スレで聞いたほうが早いと思うが……
0639nobodyさん03/05/06 23:58ID:5MrMxTMp
フォームメール作ってるんですが、
送信元がメールソフトででませんねぇ。
ロリポなんだが、
[email protected]ってなる。
sendmailするとanonymousになっちまうのか?
ちなみに、
print MAIL "From: $address\n";
とやりました。
0640nobodyさん03/05/07 00:56ID:???
>>639
$mailprog = '/usr/lib/sendmail';

open(MAIL,"| $mailprog -t") || &error("メール送信に失敗しました");
print MAIL "To: $mailto\n";
print MAIL "From: $email\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "X-Mailer:r\n\n";
close(MAIL);
0641nobodyさん03/05/07 02:08ID:???
スカラ変数とスカラ電磁波はなんか関係あるのかなー
0642nobodyさん03/05/07 05:00ID:???
>>637
ストレートに s/{NAME='\[personName\]' AND }//でいいじゃん・・・
0643nobodyさん03/05/07 05:35ID:???
テキストから読み込み,変数に格納したエスケープシーケンスが
ファイル出力時に機能せず,エスケープシーケンスのまま
出力されます.環境はWin2000sp3,ActivePerl v5.6.1です.

#input.txt(sjis)
\t\t\n\n

#test.pl(sjis)
open(IN, "input.txt");$command=<IN>;close(IN);
open(OUT, "> output.txt");print(OUT "$command");close(OUT);

test.plを実行すると,output.txtには見事に「\t\t\n\n」と出力されます.
願わくばタブタブ改行改行と出力されて幸せになりたいです.

おいらは何か勘違いしているでしょうか?
0644nobodyさん03/05/07 08:16ID:???
open(IN, "input.txt");$command=<IN>;close(IN);
$command =~ s/\\t/タブ/g;
$command =~ s/\\n/改行/g;
open(OUT, "> output.txt");print(OUT "$command");close(OUT);

open(IN, "input.txt");$command=<IN>;close(IN);
$command =~ s/\\t/\t/g;
$command =~ s/\\n/\n/g;
open(OUT, "> output.txt");print(OUT "$command");close(OUT);
0645へるぷみー03/05/07 16:32ID:IktPSMvp
sendmailを使用してメールを送信していますが、
> Microsoft-Outlook-Express-Macintosh-Edition/5.02.2106
> Microsoft-Outlook-Express-Macintosh-Edition/5.0.6
のメーラーを使用している方から文字化けの報告があります。

件名は問題なく日本語でも文字化けしていないのですが、本文がぐちゃぐちゃです。
http://www.c-5.ne.jp/~itsuki/ の"Code Check"を使用して、
機種依存文字のチェックもしましたが、問題ありませんでした。

Microsoft-Outlook-Express-Macintosh-Editionに問題があるのかもしれませんが、
以下にソースを書きますのでプログラムに問題があれば教えて下さい。
解決方法をご存じの方、是非宜しくお願い致します。
0646へるぷみー03/05/07 16:33ID:IktPSMvp
$MailAdr = '[email protected]';
$send_subject = "サブジェクト";
$send_text = <<__EOF__;
日本語の本文
__EOF__

&jcode'convert(\$send_text,'jis');
&jcode'convert(\$send_subject,'jis');
$Subject = &mimeencode($send_subject);

$SendMessage .= "To: <$MailAdr>" . "\r\n";
$SendMessage .= "From: <from\@hogehoge.com>" . "\r\n";
$SendMessage .= "Subject: $Subject" . "\r\n";
$SendMessage .= "MIME-Version: 1.0" . "\r\n";
$SendMessage .= "Content-Type: text/plain; charset=ISO-2022-JP" . "\r\n";
$SendMessage .= "Content-Transfer-Encoding: 7bit" . "\r\n";
$SendMessage .= "\r\n";
$SendMessage .= $send_text;

open MAIL,"|/usr/lib/sendmail -t -i -f from\@hogehoge.com";
print MAIL $SendMessage;
close MAIL;
0647nobodyさん03/05/07 17:55ID:???
&mimeencode(メールヘッダ全部);
か
メール本文  =~ s/\r//g;
でどうよ。

・・・・・自信なし。
0648nobodyさん03/05/07 22:23ID:???
\nがになってしまうんですが、どうすればいいですか?
0649nobodyさん03/05/07 22:26ID:???
>>648
あきらめてください。
065064803/05/07 22:30ID:???
支障はありませんか?っていうかもしかして\n=ですか?
065163903/05/07 23:24ID:BGSRMxiA
えと、とりあえず僕のはっときます。
open(MAIL, "| $sendmail -t");
print MAIL "TO: $email\n";
print MAIL "Subject: $mailsubject\n";
print MAIL "Content-Type: text/plain;\n\n";
print MAIL "名前: $mailname\n";
print MAIL "From: $mail\n";
print MAIL "$mailbody\n";
print MAIL "$addr\n$age_a{\"$age\"}\n";
close(MAIL);

これで、送信元がちゃんとでるはずなんですけど・・・
でませんね
0652nobodyさん03/05/07 23:26ID:???
>>650
んなこたぁない。
\n=・だと、本気で思ったのなら、ちょっと笑ってしまう・・・(w

どういう環境なのかさっぱり書いてないな・・・。
質問の仕方悪い。
ソースの文字コードは?
ファイルに出力して・になるの?
デフォルト標準出力で・になるの?
もっと、詳しく書いてくれないと分からない。
■ このスレッドは過去ログ倉庫に格納されています