Perlコーディング初心者質問スレ Part 44
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2005/10/17(月) 00:47:17ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0897nobodyさん
2005/12/04(日) 11:30:38ID:???perl Makefile.PL でエラーになります
Note (probably harmless): No library found for -lMagick
Note (probably harmless): No library found for -ldpstk
Note (probably harmless): No library found for -ldps
Note (probably harmless): No library found for -lXext
Note (probably harmless): No library found for -lXt
Note (probably harmless): No library found for -lSM
Note (probably harmless): No library found for -lICE
Note (probably harmless): No library found for -lX11
先に何か入れとく必要があるのでしょうか?
0899nobodyさん
2005/12/04(日) 11:47:37ID:???コンパイルできないんです
0900nobodyさん
2005/12/04(日) 11:49:12ID:???0901nobodyさん
2005/12/04(日) 11:52:27ID:???0902nobodyさん
2005/12/04(日) 11:54:20ID:???0903nobodyさん
2005/12/04(日) 12:01:54ID:???「ImageMagick」は C/C++ で書かれた画像加工ライブラリで、
君が作ろうとしているのは ImageMagick を perl スクリプトから
使う為の Perl モジュールである「PerlMagick」。-lMagick が
見つからんのなら、ImageMagick がインストールされていないか、
ライブラリの在り処を適切に指定していないんだろう。
何にせよスレ違いなんで、続きは以下へ移動してくれ。
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
0904nobodyさん
2005/12/04(日) 12:04:22ID:???localeまわりの環境変数(LANGとかLC_ほげとか)をあらかじめ設定してから起動するとか、
POSIXモジュールのsetlocaleじゃだめなの? Fedora Coreは知らんのではずしてるかも
しれんけど。
0905nobodyさん
2005/12/04(日) 18:01:02ID:i00gwMB7sub decode {local($buf,$key,$val);
undef(%in);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
$post_flag=1;
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); }
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {$post_flag=0;
$buf = $ENV{'QUERY_STRING'};}
foreach ( split(/&/, $buf) ) {
($key, $val) = split(/=/);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
掲示板の最大文字数制限をしたくてソースを見ていました。
上の51200をいじれば最大文字数も変更できるのかと思い
50に変えたのですが、500文字の書き込みも普通に投稿できます。
どうすれば、制限することができるのでしょうか。それともここは関係ないのでしょうか。
他にあやしいところは下あたりです。よろしくお願いします。
記事登録
sub regist {local($flag,$oyaChk,@lines,@data,@new,@tmp);
# フォーム入力チェック &formCheck;
# 時間取得 &get_time;
0906nobodyさん
2005/12/04(日) 18:19:15ID:???★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
0907nobodyさん
2005/12/04(日) 18:33:59ID:???0908nobodyさん
2005/12/04(日) 18:37:29ID:gXJuNnnYuse 5.008001;
と言う記述があるのですが、これはなんでしょうか?
hogehoge.pmを利用しているファイルを動かすとエラーログに↓が返されています。
Premature end of script headers: hello.cgi
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
0909nobodyさん
2005/12/04(日) 18:39:46ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
0910nobodyさん
2005/12/04(日) 19:08:08ID:5pWPWSDTエエエェェェ(´Д`)ェェェエエエ
0911908
2005/12/04(日) 19:24:42ID:gXJuNnnYありがとうございます。
use 5.008001; と言う記述は、Perlのバージョンが5.8.1以上であれば、
↓のようなエラーは出なくなるのでしょうか?
Premature end of script headers: hello.cgi
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
0914nobodyさん
2005/12/04(日) 20:14:17ID:???http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec14.13
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#6.1.2
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0915905
2005/12/04(日) 20:23:41ID:???0916nobodyさん
2005/12/04(日) 20:57:50ID:???0917nobodyさん
2005/12/04(日) 21:24:10ID:???0918nobodyさん
2005/12/04(日) 21:33:34ID:???0920nobodyさん
2005/12/04(日) 22:12:24ID:???0922nobodyさん
2005/12/05(月) 03:13:45ID:???まぁ放置が一番だけど。
0923nobodyさん
2005/12/05(月) 08:37:30ID:???0924nobodyさん
2005/12/05(月) 09:32:44ID:???0925nobodyさん
2005/12/05(月) 15:03:00ID:S1tZNUNq0926nobodyさん
2005/12/05(月) 15:05:05ID:S1tZNUNqPerl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
英文を見る限りこのエラーは、perl5.8.1以前だと出るのだと思う。
0927nobodyさん
2005/12/06(火) 22:00:39ID:???indexで[0-9]を探して、返してきた値が0、つまり文字のはじめだったらエラーを返そうとしたのですが
indexから返される値がどうもおかしいようで、うまくいきませんでした。
どのようにしたらうまくいくのでしょうか?どなたか教えてください。
0928nobodyさん
2005/12/06(火) 22:05:56ID:???0930nobodyさん
2005/12/07(水) 12:18:20ID:7UCC6Dk6HTMLを出力させる際に
print "(ここにHTMLソース)"
ってかんじでやっていて、HTMLソースの中で変数を表示する際に
普通に $TOTAL とかで数字の変数はうまく、そこに表示されますが、
文字列($TOTALTEXT='あなたの合計点は低いです。')は $TOTALTEXT
と記述しただけでは、うまく表示されません。
どなたか分かる方いませんか?
0932nobodyさん
2005/12/07(水) 12:39:51ID:???0934えすぱ
2005/12/07(水) 14:16:24ID:???Shift_JISではなくEUCでやりなされ。
0935930
2005/12/07(水) 14:25:17ID:7UCC6Dk62:print "(ここにHTMLソース、そしてこの中で$TOTALTEXTの文字列を表示したい)"
3:結果として、HTMLは出力されますが、$TOTALTEXTの内容は表示されません。
どうでしょうか
0936nobodyさん
2005/12/07(水) 14:27:05ID:???実際のコード貼ってみろ
0937930
2005/12/07(水) 14:32:23ID:7UCC6Dk6$ALLTOTALTEXT='テスト'
#HTML出力
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "<html>\n<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
print "</head><body>「$ALLTOTALTEXT」</body><html>";
0938930
2005/12/07(水) 14:33:03ID:7UCC6Dk60939nobodyさん
2005/12/07(水) 14:42:24ID:???0941930
2005/12/07(水) 14:48:14ID:7UCC6Dk6えっ?まじ?
>>940
print "Content-type: text/html; charset=Shift_JIS\n\n";
のShift_JISのとこを変えればいいのかな
0942930
2005/12/07(水) 14:52:26ID:7UCC6Dk60943nobodyさん
2005/12/07(水) 14:53:44ID:???$ALLTOTALTEXT='テスト' の末尾に ; が抜けているし
突っ込み処満載だが、; さえ入れればそれで問題ない。
>>941
Shift_JIS や x-sjis を変更した上で、ファイル自体も
EUC-JP で保存。
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
まぁ盲目的に EUC-JP にすれば OK という事ではなくて、
EUC-JP の方が問題が起きにくいってだけだけどな。
同じ変えるなら UTF-8 にした方がいいし、携帯コンテンツ
だと Shift_JIS しか使えないって事もあるだろうし。
0944930
2005/12/07(水) 14:57:06ID:7UCC6Dk6指摘ありがとう。;はただの記述ミスです。
JCODEいれてるんですが、これでは駄目なのかな?
携帯コンテンツではなく、PCオンリーなんですが
おすすめはShift_JIS?
0945nobodyさん
2005/12/07(水) 15:04:14ID:???>943が貼ってくれたリンク先をよく読め
0946930
2005/12/07(水) 15:09:57ID:7UCC6Dk6メールも自動生成して出力してるんですが、
メールのほうではちゃんと出力されるのが謎なんですよね
0947930
2005/12/07(水) 15:22:01ID:7UCC6Dk60948nobodyさん
2005/12/07(水) 15:25:45ID:???0949nobodyさん
2005/12/07(水) 16:54:51ID:???0950nobodyさん
2005/12/07(水) 17:21:10ID:qBdfvq/C話はそれからだ。
0951分かりません!
2005/12/08(木) 00:23:26ID:zq2aWK4E調べたけどよくわからなかったんで質問させてください。
やりたいことはperlとDBを使用したアプリ作成です。DBはmysql、mdb
どちらかで考えています。
現在の環境
os:windowsXp
webサーバ:Apache
1:DBの配置場所が分かりません。どこのディレクトリに配置して
どのような呼び出し方をするのでしょうか。(DBIでデータソース
を指定するところ)
2:実際インターネットにのっけたとき、サーバはunixになると思うんですが
そのときのDBの配置場所を教えてください。また、webサーバによって
dbの配置場所、接続方法は変わるんでしょうか?
0953nobodyさん
2005/12/08(木) 00:54:51ID:???メモリ上、又はファイル
0954nobodyさん
2005/12/08(木) 01:00:14ID:/QVLECMb主な流れは下記の通りです。
push(@dump, "あ,123,,,,,,,,,,,,\n");
push(@dump, "い,456,,,,,,,,,,,,\n");
push(@dump, "う,789,,,,,,,,,,,,\n");
:
:
print "Content-Disposition: attachment; filename=abc.csv\n";
my($sizeTmp);
foreach(@dump){
$sizeTmp .= $_;
}
my($size) = length($sizeTmp);
print "Content-Length: $size\n\n";
print "$downloadCsv";
ダウンロードはできるのですが、
lengthでファイルサイズが正しく取れていない??(おそらく)
それにより、ダウンロードしたCSVファイルを開くと
最後の方が欠けています。
よりよい方法や参考サイト等はございますでしょうか?
ご教授頂けたら幸いです。
0955nobodyさん
2005/12/08(木) 01:06:06ID:???0956954
2005/12/08(木) 01:10:27ID:/QVLECMb申し訳ありません。一部訂正です。
$downloadCsvは下記の様になります。
my($downloadCsv);
foreach(@dump){
$sizeTmp .= $_;
}
my($downloadCsv) = length($sizeTmp);
print "Content-Length: $size\n\n";
print "$downloadCsv";
0957nobodyさん
2005/12/08(木) 01:12:13ID:???数値だけの変なファイルがダウンロードされる気がするんだけど
0958954
2005/12/08(木) 01:14:09ID:/QVLECMb再修正してみましたが、やはりDLしたCSVファイルが欠けてしまいます。
my($downloadCsv);
foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);
print "Content-Length: $size\n\n";
print "$downloadCsv";
0959nobodyさん
2005/12/08(木) 01:17:22ID:???全体のソースとか無理かな
0960954
2005/12/08(木) 01:27:44ID:/QVLECMb内容は繰り返し部分を省いた以外はほぼそのままです。
<IN>:$in{data} = abc;(DLファイル名)
my(@dump);
push(@dump, "更新,$y/$m/$d,,,,,\n");
push(@dump, "記録,$hashDay{$in{'data'}}日分,,,,,\n");
push(@dump, ",,,,,,\n");
push(@dump, "更新,$y/$m/$d,,,,,\n");
:
以下繰り返し
:
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$in{data}.csv\n";
my($downloadCsv);
foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);
print "Content-Length: $size\n\n";
print "$downloadCsv";
exit;
0961nobodyさん
2005/12/08(木) 01:41:13ID:VQhX6rujprintしたときは\x0D\x0Aの2になるとかじゃない?
ちゃんと調べてないけど
何バイト分足りないのか比べて見たら?
0962nobodyさん
2005/12/08(木) 01:44:30ID:???進行状況のバーが無くなるぐらいだし
0963954
2005/12/08(木) 02:00:29ID:/QVLECMbとりあえず、Content-Lengthが無いとローカルでDLできない様なので
付ける方向で行こうと考えています。
DLするCSVのデータ中の改行に\x0D\x0Aを用いる事ができなかったので
下記の様にする事で問題を回避できました。
my($downloadSize);
my($downloadCsv);
foreach(@dump){
my($downloadSizeTmp) = $_;
$downloadSizeTmp=~ s/\n/\x0D\x0A/g;
$downloadSize .= $downloadSizeTmp;
$downloadCsv .= $_;
}
my($size) = length($downloadSize);
print "Content-Length: $size\n\n";
print "$downloadCsv";
0964nobodyさん
2005/12/08(木) 02:05:27ID:???0965954
2005/12/08(木) 02:18:27ID:/QVLECMb\r\nはウィンドウズの改行コードだと思うのですが、
改行コード\nをウィンドウズのローカルにDLすると\r\nに変換されるのでしょうか?
現状では\nでDLしてもContent-Lengthが正しければ正常にDLできています。
0966nobodyさん
2005/12/08(木) 02:20:59ID:???どんなブラウザ使ってるんだ?
0967954
2005/12/08(木) 02:23:59ID:???やはり何度やってもContent-Lengthがないと
Internal Server Errorになります。
0968nobodyさん
2005/12/08(木) 02:25:27ID:???0969nobodyさん
2005/12/08(木) 02:27:15ID:???それ、
>print "Content-Length: $size\n\n";
この行をそのまま消したからだろ
>print "Content-Length: $size\n\n";
を
>print "\n";
に置き換えてみろ
0970954
2005/12/08(木) 02:29:20ID:???ご指摘の通り、現環境ではprint "\n";で問題ありませんでした。
0971954
2005/12/08(木) 02:38:44ID:/QVLECMb\nで処理しているデータは\r\nや\rなどDLする環境向けに
変換する必要があるのでしょうか?
現ローカル環境のWinでDLした際には問題なかったのですが、
その他の環境やMac環境むけにDLさせる場合は
\r等に置換しないと問題となったりする物なのでしょうか?
0972nobodyさん
2005/12/08(木) 07:21:12ID:qoVbfW3Nこういった文字列が合った場合、2個目の abc にマッチさせたい場合の正規表現がわかりません。
行末にあれば abc$ でマッチできるんですが …
0973nobodyさん
2005/12/08(木) 07:38:25ID:???EXCELやある程度の機能があるエディタなんかは各種改行コードに対応しているので問題ない
メモ帳だと\nのファイルは1行で表示されるので問題あり。
0974nobodyさん
2005/12/08(木) 09:19:32ID:???何でもかんでも鵜呑みにせずウラを取ろうな。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec2.2
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#7.2.1
まともな HTTP サーバならヘッダ部の改行コードに関しては気を利かせて
くれるので "\n" で問題無い。ボディ部、今回の件だと CSV ファイルの
改行コードは >>973 の言う通りで、ファイルを読む人のソフトが特定できる
なら改行コードを合わせて吐いた方が無難。
>>972
my $str = "abcdefgabcdef\n";
for ('abc', 'def') {
$str =~ s/(($_).*?)(\2)/ $1 . uc $3 /e;
print $str;
}
0975nobodyさん
2005/12/08(木) 09:23:44ID:qoVbfW3N0976nobodyさん
2005/12/08(木) 11:18:07ID:???OSXからは \n だからね
0977nobodyさん
2005/12/08(木) 13:24:04ID:???改行コードはどのプラットフォームでも\n。
\r→CR
\n→LF
としないと、意味不明。
0978954
2005/12/08(木) 13:51:47ID:/QVLECMb現状ではDLするのは主にWin環境です。
CSVエクセルファイルであるため、開くソフトはエクセルのみであると
想定出来るためソフト側に改行コードの対応は任せようと思います。
おそらくMacで用いる事はないと思うのですが、
支障があるようであれば改行コードをDL時に選択できるものに変更しようと思います。
0979nobodyさん
2005/12/08(木) 14:31:43ID:???0980nobodyさん
2005/12/08(木) 14:55:26ID:???0981nobodyさん
2005/12/08(木) 15:04:53ID:???0982nobodyさん
2005/12/08(木) 17:02:49ID:qoVbfW3N0983nobodyさん
2005/12/08(木) 18:00:29ID:???0984nobodyさん
2005/12/08(木) 18:27:53ID:???クックブック: http://www.oreilly.co.jp/books/4873112028/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
Perldoc.com っていつも全然繋がらないんだけど、死んでる?
0985nobodyさん
2005/12/08(木) 18:30:40ID:???>>984 以外に変更した方がいい URL があったら誰かよろしく。
# 俺は立てれなかった…。
0986nobodyさん
2005/12/08(木) 18:53:17ID:???0987nobodyさん
2005/12/08(木) 19:21:50ID:???http://user.ftth100.com/mirrorhenkan/perl/
0988nobodyさん
2005/12/08(木) 22:16:12ID:7Tka8YnIスレ立てに失敗しました。orz・・・
で、質問です。
perl5.8.0を使っていたのですけど、perl5.8.5をインストールしました。
ところが、
# perl -v と打ちますと
This is perl, v5.8.0 と返ってきます。
英語だからとテキトーに読み飛ばしてインストールしたせいだとは思うのですが、
後から、perl5.8.5をデフォルトで使用するにはどのようにしたらよいですか??
0990nobodyさん
2005/12/08(木) 22:47:35ID:???0991988
2005/12/08(木) 23:04:14ID:???http://pc8.2ch.net/test/read.cgi/php/1134049707/
>>989
どこで質問したらいいですかねぇ。
知ってたら、もうちょっと教えてください・・・。
0992nobodyさん
2005/12/08(木) 23:28:57ID:???乙
OSがLinuxならLinux板のくだ質スレ辺りで、経緯を説明して古いほうの
Perlをアンインストールしたいと聞けば良いんじゃないかな。保証は出来ないが…
0994nobodyさん
2005/12/09(金) 00:04:36ID:???ウェブで調べて、とりあえずuse encoding "euc-jp";と、してみたとです。
そしたら、DBテーブルからもってきた文字列だけ、出力時に
〜does not map to euc-jpと怒られるとです。DBもeuc-jpで作ってあるとです。
スクリプト内の日本語や、openで開くファイルは問題なかです。
どこに原因があるとですか。よろしく、おねげーしますだ。
0995nobodyさん
2005/12/09(金) 11:59:04ID:???0996nobodyさん
2005/12/09(金) 12:14:53ID:???そのDBから持ってきて出力時にエラーになる文字列とやらの
中身とutf8フラグの状態を調べるのが基本だと思うが。
レス数が950を超えています。1000を超えると書き込みができなくなります。