Perl コーディング初心者質問コーナー Part37
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/22 01:41ID:???誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0155nobodyさん
04/09/01 01:15ID:IFM26Jlfだれか教えてください。
ダウンロードというボタンをおしたら、CSVがダウンロードできる仕組みにしたいです。
が正解でした。といううことでおしえてください
0156nobodyさん
04/09/01 01:23ID:???教えてやろう。
PerlもCGIも使わなくてもできる。
よって板違い。
0157nobodyさん
04/09/01 01:47ID:IFM26Jlf0158Pearl
04/09/01 01:56ID:???...
END
と終端文字列を記述すると何も表示されないのに、
print "...";
print <<"END";
...
END
とすると表示されます。(print"...";の内容は表示されません)
これは何故なんでしょうか??
初心者ですいません…。
0159nobodyさん
04/09/01 02:16ID:???0160nobodyさん
04/09/01 12:01ID:VNRqZmighashでの実装、use fieldsでの実装
どちらがいいんでしょうか?
fieldsのが便利だと思うんですが、
内部でpseudo-hashを使ってる?らしく
pseudo-hashは今後推奨されなくなるようで
その辺り困ってます。
--------------------------------------
sub new {
my( $class, $name, $height ) = @_;
my $this = {
'name' => $name,
'height' => $height
};
bless $this, $class;
}
--------------------------------------
use fields qw( name height );
0161nobodyさん
04/09/01 12:17ID:???5.9.0以降ではpseudo-hash使わない実装に変更されたので
普通に使う分には問題ないんじゃなかったっけ。内部の
phash直接触るような行儀悪いプログラム書いてりゃ別だけど。
0162nobodyさん
04/09/01 12:33ID:VNRqZmigありがとうございます!
なるほど、確かに、phashを直接使うなみたいな事は書いてありました。
perl6になったらこの辺も変わりそう?ですし、
perl5では、これでいいってことで!
0163nobodyさん
04/09/01 18:16ID:GIk9V8QY日本語を使う時には特別な処理が必要なのですね。
今いろいろなサイト見てますが、皆さんのオススメの解説サイトがありましたら教えてください。
おながいしますm(_ _)m
0164nobodyさん
04/09/01 18:28ID:???メール送信の基本はperlに限ったことではないが
0166163
04/09/01 19:59ID:GIk9V8QY件名の分だけ他とは違うエンコードをしないといけないという意味です。
>>165
そうなのです。あまりいいところが見つからないのです。
実際のサンプルソースとかを載せながら解説してるサイトがあるといいなと思ったのですが;
0167nobodyさん
04/09/01 21:10ID:???0168nobodyさん
04/09/01 21:49ID:Fq5X9xKH上記のコードでリダイレクトさせる前に
htmlタグを読み込ませたいと思います。
<IMG SRC="http://www.hogehoge/test.cgi" width=1 height=1>
例えば上記のようなタグを読み込ませたい場合、
どのようにコードすればいいのでしょうか?
おながいします
0169nobodyさん
04/09/01 22:00ID:???お勧めサイトは(・∀・)ココダ!!
ttp://www.ietf.org/rfc/rfc2047.txt
>>168
うーん。
> width=1 height=1
リダイレクトした「数」をカウントできればいいというわけではないの?
0170nobodyさん
04/09/01 22:06ID:3SqQ1yBxprint "Location: (p)http://www.yahoo.co.jp/\n\n";
0171>>163
04/09/01 22:26ID:5tu92ZqP$subj = MIME::Words::encode_mimeword($subj, 'B', 'iso-2022-jp');
0173nobodyさん
04/09/01 22:39ID:???0174168
04/09/01 22:51ID:Fq5X9xKHレスありがとうございます。
そうですね、数をカウントできればいいというわけではないです。
$hoge = file( "http://www.hogehoge/test.cgi" );
これについてなんですが、
http://www.hogehoge/test.cgi の部分に変数を用いたい場合、
どんな感じになるでしょうか?初歩的な質問すいません。
http://$variable.com/test.cgi のようなURLにしたいのですが。
$hoge = file( "http://$variable.com/test.cgi" );
で変数として扱われるんでしょうか?
0175163
04/09/02 01:14ID:hfUgeMHv英語よめません;
>>171>>173
>$subj = MIME::Words::encode_mimeword($subj, 'B', 'iso-2022-jp');
これって5.8でないと駄目なんですか?使用サーバのperlは5.6ですが。
後、このモジュール?ライブラリ?ってRFC2047の
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
をクリアしてないですよね?PERLメモ読んでて、とりあえずBASE64エンコードは
なんかのモジュールでやるとしても1と2をどうしようかと迷ってます。
みなさんはちゃんと1と2に対応したサブルーチン等を作ったりしてるんでしょうか?
0178163
04/09/02 01:50ID:hfUgeMHv<input type="text" name="subject">
<textarea name="body"></textarea>
use MIME::Base64;
require "jcode.pl";
受け取ったフォームデータをデコード+JIS変換して%formを作成。(コード省略)
$encode_word = encode_base64($form{subject});
open MAIL,"|sendmail -t";
print MAIL<<END;
From: [email protected]
To: $form{to}
Cc:
Bcc:
Subject: =?ISO-2022-JP?B?$encode_word?=
$form{body}
END
これでは
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
をクリアできないですので。
0179>>163
04/09/02 02:09ID:LLw2NK0rバージョンやらモジュール云々じゃなくて、自分で制御すればいいだけでは?
ttp://www.hippo2000.info/perl/myfull.htm
0180163
04/09/02 02:14ID:hfUgeMHvはい。エンコードは別にたいした問題はないのです。
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
3.encoded-word はそれぞれ独立してデコード可能でなければならない.
4.encoded-text をデコードした文字列の文字コードは,最後に ASCII が指定された状態でなければならない.
5.encoded-word が現れる出現位置に関する決まり.
Subject や Comment のヘッダフィールドなどの, 'text' 内に出現.
"(" と ")" で区切られた 'comment' 内に出現.
From や To,CC ヘッダなどで,'phrase' 内に出現.
'addr-spec' 内で出現してはならない.
'quoted-string' 内で出現してはならない.などなど.
6.隣り合う encoded-word の間の 'linear-white-space' は無視する.
これらをクリアするのに皆さんは自分でエンコード前の準備用としてのルーチンを
自作してるんでしょうか?というのが>>175での質問です。
0181↑
04/09/02 02:30ID:???ttp://www.futomi.com/subroutine/encodesubject.html
0182163
04/09/02 02:40ID:hfUgeMHv>このサブルーチンは、RFC2047に完全には準拠していません。RFC2047では、ASCII文字列は、エンコードしないことを推奨していますが、このスクリプトでは、簡略化するために、すべてをエンコードしています。
紹介のサイトでは上記以外の違反はしてないみたいですが
企業でのメーラーとして使う場合はどの程度準拠すればいいのでしょうか?
ところで>>181さんは>>180の1〜6をどこまで守ってsendmailを利用されてますか?
一般的なレベルが知りたくなってきました。
0183nobodyさん
04/09/02 03:27ID:???おまいperlメモ読んでるなら、そこにあるソースをそのままもらえばいいのに。
あれならほぼokだろ。まあちょっと長いけどな。>>181のサイトは俺も見たが
asciiもエンコードしちゃう点を除けばかなりいい。jcode.plさえあれば誰でも
できるってのが手軽だしな。
そもそもPERLメモの方はsubject以外でも使えるし、デコードまでやれるルーチイだから
比べてもしょうがないな。ちなみに俺はフォームメールなど作ったことなし!
0185nobodyさん
04/09/02 11:21ID:3eXmd8V2$logfile = "./sizecount.dat";
$count = -1;
$count += (-s "$logfile");
open(OUT,">>$logfile");
print OUT "\n";
close(OUT);
print "Content-type: text/html\n\n";
print "countdate=$count\n";
参考書通りに作ったカウンターなんですけど
アップロードして動作確認したら正常に動いたので
flashMX2004でダイナミックテキスト、変数dispcountに
表示させたいんですけど、出来ません。
チェック用の一応変数checkにはloadcompleteと表示されました。
アクションスクリプト
System.useCodepage = true;
CGIfile = "sizeount.cgi";
myLoadVars = new LoadVars();
myLoadVars.onLoad = function(){
dispcount = myLoadVars.countdate;
check = "loadcomplete";
}
myLoadVars.load(CGIfile);
0186185
04/09/02 11:25ID:3eXmd8V2CGIの下から2行目はprint "Content-type: text/plain\n\n";
に変更してからフラッシュでやったんですけどなぜか表示されません、、、
これまで変数を受け取るだけや送るだけのサンプルは参考書通り出来てたのですが
お願いします。
0187185
04/09/02 11:31ID:3eXmd8V2ブラウザのキャッシュ関係ではありません。
お願いします。
0188185
04/09/02 11:35ID:3eXmd8V2ダイナミックテキスト,変数dispcountにはundefineと表示されます。
お願いします。
0189nobodyさん
04/09/02 11:38ID:???おそらく Flash の方に何らかの問題があると思われるが、
残念ながら Flash についてはこのスレで扱う範囲ではない。
0191nobodyさん
04/09/02 14:52ID:???俺は1〜6全部クリアしたライブラリ作ったが、たいていはそこまで必要ないので
作る奴はそういないだろうな。特に何が問題なのかも分からんような奴しか集まらん
このスレには。
ちなみに1〜6を完全に満たしたままだと、そうでないアホなエンジンが5を
無視してエンコードしたものを戻せないので、X-Mailerが自身ならstrictモード、
他ならlooseモードで動くようにしてる。
商用なので公開はせんが。
0192nobodyさん
04/09/02 18:06ID:LZDH898f0193nobodyさん
04/09/02 22:18ID:0Sj0dISTShiftJISのデータをDBから取得して、そのデータを使って
UTF-8のXMLファイルを作成したいのですが、うまくできません。
いろんなサイトを見てみましたが、うまくできないので
方法をご存知な方がいましたら、教えてください。
0194nobodyさん
04/09/02 22:38ID:???0195nobodyさん
04/09/02 23:59ID:0Sj0dISTDBからできないのはなぜでしょうか?
use Encode;
my $a = "あああ";
Encode::from_to($a, "shiftjis","utf8");
$xml =<<"EOF";
<?xml version="1.0" encoding="UTF-8" ?>
<test>$a</test>
EOF
print $xml;
0196nobodyさん
04/09/03 02:42ID:d4bnE4Tfから、中央値、最頻値を求めるには、どうすればいいですか?
モジュールは見つかったのですが、レンタルサーバーなので使えません。
誰かわかる人いたら教えてください。
よろしくお願いします。
0199nobodyさん
04/09/03 09:07ID:???@array = (1,5,8,6,2,1,3,8,6,4); #任意の数字
# 中央値
$#array % 2 ? $m=($#array+1)/2 : $m=$#array/2;
$median=(sort @array)[$m];
print "中央値は、$median。\n";
# 最頻値
for(@array){
$hindo{$_}++;
}
foreach $key (keys %hindo){
$max=$hindo{$key} if $hindo{$key} >= $max;
}
foreach $key (keys %hindo){
push(@max, $key) if $hindo{$key} == $max;
}
print "最頻値は、@max。\n";
0201196
04/09/03 11:54ID:???ありがとうございました!
やっぱり結構難しいプログラムになるんですね。
とても自分のプログラミングテクニックじゃできませんでした・・・
0202nobodyさん
04/09/03 13:23ID:???0203nobodyさん
04/09/03 13:55ID:???0204nobodyさん
04/09/03 22:27ID:qXHB0Gmyトカゲのアイコンがポコチンに見えた
0205>>163
04/09/03 22:51ID:???よくわからんが、選択肢は3つってとこか
1. このまま放置(案外これかもな)
2. JISじゃなくてUnicodeにしてMIME-Headerエンコする(作り込みなしで完璧)
3. 頑張ってJISと2047に固執する(作ったらcpanにあげてくれw)
> $header = encode('MIME-Header', $utf8);
0206174
04/09/04 01:17ID:jFFI5mOb無理でございました
0208nobodyさん
04/09/04 11:47ID:zUjRJg63http://news.fs.biglobe.ne.jp/news/photo/
にある
映画「釣りバカ日誌」の歴代のヒロイン役で誰が一番好き?
という投票結果がエラーになったり投票総数が0になったりします。
ハングル板ではビグロブによる結果改竄じゃねーかって祭りになってるので
すが、本当でしょうか?
教えてエロい人!
0210nobodyさん
04/09/04 11:55ID:zUjRJg63すいませんまちがいです
http://news.fs.biglobe.ne.jp/special/sanmenkiji.html
の
最近人気急上昇の韓国俳優「四天王」で誰が一番かっこいい?
の投票でした・・・
0211nobodyさん
04/09/04 12:22ID:???ま、スレ違い。
0212nobodyさん
04/09/04 13:23ID:???0214nobodyさん
04/09/04 15:42ID:llgg8ga30215nobodyさん
04/09/04 16:07ID:???俺が使っている
カウンターは
1日1000以上回ることが保証されている。
アンケートは
人がいなくてもリロードするだけで増えていく。
チャットは
必ず知らない人がいる。
プログラムは作られたとおりにしか動かないのです。
0216nobodyさん
04/09/04 16:26ID:L+DB05Rw$str =~ s/\r\n|\r/\n/g;
でいいっけ?なんか自分が書いた以前のコードに
$str =~ s/\n\r|\r/\n/g;
っていう逆になってるのがあって色々調べたら、\r\nの方が圧倒的に多いけどたまに
\n\rって書いてるコードもあった・・・・・
\r\n || \x0D\x0A
で正規表現するのが正解だよね?
0217nobodyさん
04/09/04 16:37ID:???0219nobodyさん
04/09/04 17:34ID:uW2eM/jVFreeBSD5.2.1 perl5.6.1
でperlスクリプトを書いています。
ファイルにある$$に囲まれた文字列をキーにして
ハッシュから値を取り出して出力しようとしていますが、
うまくいきません。
単純な置換ならうまくいくのですが、どうすればそのようなことが
可能なのでしょうか?
うまくいかないコード↓
while(<FILE>){
s/\$\$(.+)\$\$/$hash{\1}/g;
print $_;
}
目的の出力↓
hash("key1","val1","key2","val2")
FILE
文字列$$key1$$文字列
文字列$$key2$$文字列
出力結果
val1
val2
0220nobodyさん
04/09/04 17:41ID:???0221174
04/09/04 17:47ID:jFFI5mObmetaをどのように使うか分からないんです涙
metaにする利点はあるのでしょうか?
0222nobodyさん
04/09/04 19:30ID:???http://tohoho.wakusei.ne.jp/html/meta.htm
■ 別ページへの自動ジャンプ10秒後にURL=...で指定したURLにジャンプします。ホームページの移動の際に用いている例があります。IE3.0、Netscape Navigator 2.0 でサポートされています。
<meta http-equiv="Refresh" content="10;URL=http://xyz.com/">
0223174
04/09/04 19:49ID:jFFI5mOb申し訳ないですが、
htmlでなら分かりますが、perlでは分かりません。
0224nobodyさん
04/09/04 20:10ID:???0225nobodyさん
04/09/04 20:18ID:???オリジナルのエラーページを作成しています。
エラーの元になっているファイル/フォルダのURLをオリジナルのエラーページに表示させようと
http://<!--#echo var="SERVER_NAME" --><!--#echo var="REQUEST_URI" -->
というコマンドと環境変数を使っていますが、
オリジナルのエラーページのURLが表示されます
ステップサーバー(http://stepserver.jp)というレンタルサーバーを利用しており、
そのサポートに問合せましたが、上記の記述で問題ない、との回答でした。
何かアドバイス・ヒントを頂けないでしょうか?
0226nobodyさん
04/09/04 20:25ID:???申し訳ないですが、なにが分からないのか分かりません。
>>225
申し訳ないですが、それのどこがperlに関する質問なのか分かりません。
0227nobodyさん
04/09/04 20:43ID:???CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/956
0228nobodyさん
04/09/04 20:55ID:DfAuufFlどうやればいいのでしょうか?
0229174
04/09/04 20:57ID:jFFI5mOb内容なんだけど、アフォですか?
meta分かったらそもそもこの質問してねーだろ??
>>224
おまえが(以下略
0230nobodyさん
04/09/04 21:14ID:???ttp://homepage3.nifty.com/hippo2000/perltips/perlgrph.htm
0233nobodyさん
04/09/04 21:43ID:???0234nobodyさん
04/09/04 21:43ID:???GifGraphの解説がありましたが、最初の方に、
「CPANには他にもChart-PNGgraph、GDgraphといったものもあり、
どれが今後も残っていくのかよくわからない状態です。(2000/1/5)」
と書かれています。いったいどのモジュールが現在主流なので
しょうか。質問ばかり申し訳ありません。
0237nobodyさん
04/09/04 23:09ID:mKo8NLNsそのソフトが終わらないと、そのコンソールがperlに乗っ取られた
まま使えなくなっちゃうんですが、これは仕方ないのでしょうか。
exit;入れてもダメですた。
system("Desktopmem.exe");
exit;
0239nobodyさん
04/09/04 23:51ID:DfAuufFlありがとうございます
>>234 >>238
http://www.hippo2000.info/cgi-bin/KbWiki/KbWiki.pl?cmd=disp&page=%B8%C5%A4%AF%A4%CA%A4%C3%A4%BF%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB
GDGraphってのに統合されたっぽいです
0241nobodyさん
04/09/05 00:05ID:???perlで変更して保存、それをdesktopmemoに読み込ませて起動と
いうことをやりたいので(スタートアップに登録)、すると、
バッチファイルかシェルスクリプトしかないですかね。
0243nobodyさん
04/09/05 00:13ID:???ありがとうございます。
今は、GDGraphなんですね。実は、オライリーの「perlによるwebプログラミング」
とかいう本、かなり前に買ってあって、あれには、GifGraph、Gimpが中心に説明
してあったので、うーむ、ちょっと隔世の感。やってないのがいけないんだけど。
0244210
04/09/05 00:15ID:7pvSYkfOスレ違いなのに回答ありがとうございます。
ただ、結局何をおっしゃりたいのか今ひとつよくわからなかったんですが
プログラムの想定外の事態が起こったということでしょうか?
0246nobodyさん
04/09/05 06:56ID:???0247nobodyさん
04/09/05 10:26ID:gdlM8Pd7どのように実現したら良いか方法をお教えください。
例えば、変数$textに下記のデータが入っているとして
--------------------------
> 引用元のテキスト1
> 引用元のテキスト2
> 引用元のテキスト3
返信テキスト
--------------------------
1桁目に半角の'>'があった行を下記のようなデータに置き換えたいと
考えております。
--------------------------
<span class="quoted">> 引用元のテキスト1
> 引用元のテキスト2
> 引用元のテキスト3</span>
返信テキスト
--------------------------
また、スレ違いの質問でしたら誘導していただけると嬉しいです。
0249nobodyさん
04/09/05 11:49ID:???俺なら一行ごとに
<span class="quoted">> 引用元のテキスト1</span>
ってやってから
</span><BR>\n<span class="quoted">
だのを削除するかもなあ。
正規表現ひとつだとややこしくなりそう。
0251nobodyさん
04/09/05 14:09ID:???$text =~ s|(^>.*(?:\n^>.*)*)|<span class="quoted">$1</span>|gm;
0252247
04/09/05 19:15ID:???おお、>>247の条件はバッチリでした。
ただ引用ブロックが複数あると、2つ目以降に適用されないので、
もう1条件つけ加えることで、完全に期待通りの動作ができました。
>>248 >>249 >>251さん、とても助かりました。ありがとうございます。
■ このスレッドは過去ログ倉庫に格納されています