Perl 初心者コーナー Part22
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/15 10:15ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
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
0611nobodyさん
03/05/05 15:47ID:eAEbJzW0$aはsortのみたいに書き変えないでいい物かと思って失敗しましたけど
違うんですね、、
それにperlにも整数に直すint型が有るんですねー。(C++かじった事有)
これで小数点に悩まされずに済みます、ありがとうございました〜
0612nobodyさん
03/05/05 16:03ID:???0614nobodyさん
03/05/05 16:29ID:???無型流自由殺法
0615nobodyさん
03/05/05 17:53ID:???これまで1か0のフラグとして使っていた変数$aの真偽を判定するのに
if($a == 1)
と記述していたのですが、もしかして
if($a)
だけでも良いのでしょうか。良いのならコードがかなりすっきりするんですが…。
良い、悪いだけでも結構ですので、どなたか教えていただけませんでしょうか。
0616nobodyさん
03/05/05 17:57ID:???か
if ($a & 1){ hoge; }
が正解でつ。
0617nobodyさん
03/05/05 18:03ID:???真偽判定だけならそれでもかまわない。
ないとは思うが、
if(1) # 真
if(0) # 偽
if('') # 偽
if('0') # 偽
if('00') # 真
こういうワナもあるので注意。
0618nobodyさん
03/05/05 18:38ID:???if ($a)
とやると、$a = "0" の罠にはまる。
0619nobodyさん
03/05/05 18:40ID:???動かないスクリプトとか、普通に出回ってそうだ
0621nobodyさん
03/05/05 19:14ID:???こんな感じの。うちではちゃんと動くけど。
0622615
03/05/05 19:38ID:???トラップに陥らないよう注意して、書き直していこうと思います。
0623Dream ☆
03/05/05 21:39ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0624nobodyさん
03/05/06 01:24ID:???607さんのいったカウンタのリンクを貼るってどういうことですか?
レンタルカウンタ色々みたけど、どれがどれなのか。。。
0625nobodyさん
03/05/06 01:26ID:???プログラム覚えるのと、英語覚えるのどっちが難しいですか?
両方出来る人が居たら、教えてくだしい
0626nobodyさん
03/05/06 01:34ID:???0627nobodyさん
03/05/06 01:36ID:???このスレで聞くのがいいんじゃないか?
0628nobodyさん
03/05/06 01:41ID:???0630nobodyさん
03/05/06 18:03ID:39bU8fpCPerl←の読み方教えてぇーペリ?ピール?
0631nobodyさん
03/05/06 18:04ID:39bU8fpC0632nobodyさん
03/05/06 18:24ID:???0635nobodyさん
03/05/06 21:19ID:???0636nobodyさん
03/05/06 21:32ID:???と
$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\].*?\}//
0639nobodyさん
03/05/06 23:58ID:5MrMxTMp送信元がメールソフトででませんねぇ。
ロリポなんだが、
[email protected]ってなる。
sendmailするとanonymousになっちまうのか?
ちなみに、
print MAIL "From: $address\n";
とやりました。
0640nobodyさん
03/05/07 00:56ID:???$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:???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:???$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> 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$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:???か
メール本文 =~ s/\r//g;
でどうよ。
・・・・・自信なし。
0648nobodyさん
03/05/07 22:23ID:???0650648
03/05/07 22:30ID:???0651639
03/05/07 23:24ID:BGSRMxiAopen(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:???んなこたぁない。
\n=・だと、本気で思ったのなら、ちょっと笑ってしまう・・・(w
どういう環境なのかさっぱり書いてないな・・・。
質問の仕方悪い。
ソースの文字コードは?
ファイルに出力して・になるの?
デフォルト標準出力で・になるの?
もっと、詳しく書いてくれないと分からない。
0654639
03/05/08 01:03ID:YKg4v/HNそうなんですか。本にかいていた通りにやったんですが、、、、
おまけに、本には、メーラーの画像で送信者でてるし。
-tとか詳しく教えてくれませんか?
0655nobodyさん
03/05/08 04:20ID:???漏れも-t しか指定してないが、fromは出るぞ。
漏れのを貼っておく。
$mailhead = <<EOF;
Received: This mail is sent from Democratic People's Republic of Korea.
EOF
$mailhead .= "From: $namefrom <$mailfrom>\n";
$mailhead .= "To: $nameto <$mailto>\n";
$mailhead .= "Subject: $subject\n";
$mailhead .= "Date: $date\n";
$mailhead .= "MIME-Version: 1.0\n";
$mailhead .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
$mailhead .= "Content-Transfer-Encoding: 7bit\n";
$mailhead .= "X-Priority: $priority\n";
$mailhead .= "X-Mailer:Microsoft Outlook Express 7.00.0000.0300\n";
if (-x $sendmail){
unless (open(OUT, "| $sendmail -t")){
&error('送信エラー','メールの送信に失敗しました。');
}
unless (print OUT &mimeencode($mailhead)){
&error('送信エラー','メールの送信に失敗しました。');
}
unless (print OUT $mailbody){
&error('送信エラー','メールの送信に失敗しました。');
}
close(OUT);
}
0656nobodyさん
03/05/08 05:21ID:0p+XQofHたため、質問させてください。
プログラムの設定ファイル等の使いまわしをきかせるため、
各ファイル構成を下記のようにディレクトリ分けしました。
public_html
|- cgi(プログラム)
|- template(テンプレート)
|- common(設定ファイル等)
|- image(画像)
common内のconfig.plには、
$template_dir = '/public_html/template';
$image_dir = '/public_html/image';
と各種ディレクトリ情報が格納されており、
これの設定ファイルを全プログラム内でrequireして、各種ディレク
トリ名等が変更されても、config.pl内の記述を変更するだけで済ま
せられるようにしております。
しかしこの場合、commonディレクトリ名が変更された時だけ、
全プログラムのrequire記述を変更しなければなりません。
なにかよい解決方法があれば、どうかご教授いただけないでしょ
うか。
頭悪い質問ですみませんが、どうか宜しくお願いいたします。
0657nobodyさん
03/05/08 06:32ID:???普通、そういう初期設定とかは、mainパッケージ内に記載するか、
mainパッケージと同じディレクトリに置いておくような物だと思うが・・・
こんなことしたら、ぜんぜん意味なくなるだろうが・・・
require専用の設定ファイルを作って、それをmainパッケージと同じディレクトリに置いて、
すべてのファイルで、そのrequire専用設定ファイルを呼び出すってのはどう?
0659648
03/05/08 07:32ID:???言葉足らずですみません
foreach(@deeta){
$E = $_; $C = $_;
$C =~ s/([0-9]{9,}) (.*)/$1/i;
if ($C < $jikan) {last;}
$E =~ s/([0-9]{9,}) (.*)/$1<>$SABA<>$ITA<>$2<><>\n/i;
$honbun.= $E;
}
open(FILE, ">come1.dat") or die;
print FILE $honbun;
close(FILE);
としてから、come1.datをメモ帳で開くと\nがになってダラダラと一文が…
ソースの文字コードは SHIFT-JIS です。
0660nobodyさん
03/05/08 07:41ID:???それどこで実行してるんだ?\nがLFになってるから認識できないんだろう。
メモ帳が認識する改行コードはCRLFだったはず。
0661648
03/05/08 07:51ID:???0662nobodyさん
03/05/08 08:07ID:???Windows上で実行すると\nはCRLF(0x0D 0x0A)になる。
Mac上で実行すると\nはCR(0x0D)になる(の?Mac持ってないから知らん)
UNIX系とLinuxはLF(0x0A)になる。
0663nobodyさん
03/05/08 08:08ID:???---
●どのようなサーバー?どんな環境?
最新LinuxにApache、qmail、ProFTPDをアレンジした仕様になっています。
---
改行を表すエスケープシーケンス"\n"は
Linux環境でLF(0x0A)として出力されるわけです。
Windows標準の(メモ帳で開ける)改行コードはCR+LF(0x0D+0x0A)なので、
それ相応の書き方をしなければなりません。
書き方は検索してけれ。
0664nobodyさん
03/05/08 09:15ID:???0665nobodyさん
03/05/08 10:54ID:???CGIで、csvファイルをzip圧縮したものを吐き出したいと思ってます。
#! /usr/bin/perl
print "Content-type: application/x-csv\n";
print "Content-Disposition: inline; filename=ahya.csv\n\n";
print "hoge,hoge\n";
exit;
でcsvの吐き出しはできたのですが、
これをzip圧縮して吐き出すにはどうすればいいでしょうか?
0666nobodyさん
03/05/08 11:11ID:???http://www.memb.jp/~deq/perl/doc-ja/Archive-Zip.html
http://pc.2ch.net/tech/kako/1006/10069/1006910650.html
の>>102以降とか。
0667665
03/05/08 11:33ID:???ありがとうございます。
zipファイルを圧縮するのはsystem関数でもできるんですが、
zipファイルをディスク上に作っちゃいますよね?
それをさせないで、直でブラウザに吐き出すのって無理でしょうか?
Archive-Zipも一度ディスクに作るようなので。。
0668nobodyさん
03/05/08 11:38ID:???環境がわからんが、シンボリックにしる>common -> 変更後のディレクトリ
>>659
メモ帳で開くからややこしい。
改行コードを認識するアプリで開けるれ。
0669nobodyさん
03/05/08 11:44ID:???行末の'(なんとか)'というのを削除したいです。
s/(.+?)$//;
だとだめでした。
s/\Q(\E.+?\Q)\E$//;
もだめでした。
s/(.+)$//;
だとまっちするようですが、当然、行中のものにマッチしちゃうので
困ります。どうしたらいいでしょうか。
0672nobodyさん
03/05/08 12:38ID:???0674nobodyさん
03/05/08 12:49ID:???行末と言っているが、改行を削除し忘れてたりしてないか?
0675nobodyさん
03/05/08 12:50ID:???$line = $_;
$line =~ s/(.+)$//;
print "$line\n";
0677nobodyさん
03/05/08 13:03ID:???では、なぜ、s/(.+)$//;はまっちするんでしょうか。
>>674
chompやchopもやりましたし、文字コードもsjisとeucで
試しましたが、だめです。
>>675
>>673に挙げたテストデータでやってみれば分かりますが、
これでは、マッチしません。それに、うまくいったとしても
(.+)では、最初の括弧からマッチしてしまいます。
>>675
すべて削除してやってます。
「ローカル」って?CGIじゃないです。
0678nobodyさん
03/05/08 13:07ID:???s/(.*)(.*?)\s.?$/$1/;
print;
}
__DATA__
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
0679nobodyさん
03/05/08 13:15ID:???私の環境ではsjisにしても、eucにしてもだめです。
$ perl test1.pl
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
$ perl test1.pl |nkf -s
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
なぜでしょうか。
0682nobodyさん
03/05/08 13:36ID:???>>675では、
木立
山の上の芋粥
となるでしょう。
これがあなたの期待なのですね。求められているのは、
木立(こだち)のなかに
山の上の芋粥(いもがゆ)
ですよ。
0684nobodyさん
03/05/08 13:50ID:???もう逝っちゃったかな?
jcode::tr(\$_, '()', '()');
s/\([^\(\)]+\)\n$/\n/;
jcode::tr(\$_, '()', '()');
print;
0685nobodyさん
03/05/08 14:05ID:???私の環境ではダメでしたか。
っていうか、その「私の環境」を書けよ・・・
最低、OSは何で、Perlのバージョンはいくつくらいは書けるだろ・・・
俺は>>678のソースで正常に動いた。
>>679の環境がおかしいんじゃねーのか?
0686nobodyさん
03/05/08 14:35ID:???ありがとうです。全角括弧を半角括弧に変えるのならエディタでもできる
のですが、全部Perlでやりたいと。
>>685
私の環境は、cygwin+perl,v5.6.1 built for cygwin-multiです。
>>678のソースは、動くことは動きますが何度やっても求めるものが
出てきません。
0687nobodyさん
03/05/08 15:15ID:???ニコラ・テスラのパクりだろ。( ゚Д゚)
http://plaza16.mbn.or.jp/~satchel/
0688nobodyさん
03/05/08 17:33ID:???0689nobodyさん
03/05/08 19:18ID:???Berryという画像巡回のやつばかりで面白くないんで
Berryからのアクセスを弾く方法を探しています
なんかいい方法ないでしょうか?
imgboard.cgi使っています
0690nobodyさん
03/05/08 19:23ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0692nobodyさん
03/05/08 21:05ID:???こちとら負荷かけないようにまったりアクセスしてるんだが、
それでも禁止するならしやがれ、というスタンスですな
0693nobodyさん
03/05/08 21:33ID:???0694nobodyさん
03/05/08 21:39ID:???0695nobodyさん
03/05/08 21:41ID:BuFtD7dz0697nobodyさん
03/05/08 22:18ID:???0698nobodyさん
03/05/08 22:52ID:???if(opendir(DIR,"./DAT"))
$dir = @dir = <DIR>;
closedir(DIR);
}else{
print("opendir error");
}
@dirにはファイルが配列で
$dirにはその個数が入ると思うけど・・・
>>695
perlにもgrobあったのか 今知ったわ
こっちのほうがよさそうね
$dir = @dir = glob("./DAT/*");
0699nobodyさん
03/05/08 22:53ID:???0700698
03/05/08 22:56ID:???.と..が入るから
$dirから2引いた数がファイル数ね。
0701nobodyさん
03/05/08 23:03ID:w+g/ULrK前から思ってたのですが、
「Perl」と「URL」
それぞれ何と読むのが正確ですか?
0702nobodyさん
03/05/08 23:08ID:???0705nobodyさん
03/05/08 23:29ID:TaEzP3Hcもう少しでDIがURLだったな
0706nobodyさん
03/05/08 23:46ID:???perlのソートを使おうとしているんですが、微妙に意味が分からない事になりました。
sort {$a <=> $b} @aaa;
数字を並べる時、この書きかたが一般的だと思うのですが、
$aと$bってなんでしょう。
「イツのまに、なにが代入されたのでしょうか?」←これが質問1。
で、実際のソートは、返ってくる数字「-1」「0」「1」の三種類によってsortが返すリストの順番だと思ったのですが、
「それは正解ですか?」←質問2
もし、正解ならば「-1」「0」「1」の三種類が発生する形式ならば可能ですか?
それとも、必ず「$a」「$b」を使うような形式にする必要がありますか?←質問3
詰まる所、$aと$bの中身がよく分からないので、sort自体がよく分からない物になってしまってます。
m(__)m
0707nobodyさん
03/05/09 00:01ID:FPjkEDjh0708nobodyさん
03/05/09 00:02ID:???そうなってるからとしか説明しようないだろうな。
$aと$bは単純に比較する物
本当は関数を別に書いて、そこに登場する
0709Dream ☆
03/05/09 00:04ID:???そうなってるからとしか説明しようないだろうな。
$aと$bは単純に比較する物
本当は関数を別に書いて、そこに登場しる
0710706
03/05/09 00:25ID:???う〜ん。
回答ありがたいのですが、サッパリ分からないです…汗。
>>706の三つの質問の回答を待つと同時に、もう一つ質問させてもらいます。
とあるサイトで調べた所、
>このサブルーチンはソートすべきリスト中の要素2個を渡され、
>何回も繰り返し呼び出され、完全にソートされるまで繰り返す
と、上記のようにかいてありました。
sort {ルーチン} @リスト;
これは「@リスト」が並び替えて返ってくる値であり、
その順番を決めるのが「ルーチン」の部分だと思っています。
で、上に「ソートすべきリスト中の要素2個を渡され」
と書いてありますが、これが$aと$bだとにらんでいます。
この時、$aと$bの内容を自動ではなく、任意で決めることはできないのでしょうか?
いや、任意で決めたいと思っているのですが、そんな必要はないのかな?
■ このスレッドは過去ログ倉庫に格納されています