Perlコーディング初心者質問スレ Part 45
■ このスレッドは過去ログ倉庫に格納されています
0001988
2005/12/08(木) 22:48:27ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0083nobodyさん
2005/12/14(水) 11:02:06ID:???いちいちフラグ用の定数を用意する必要もないから
openでできることをやる分には楽だよ。
sysopenじゃないと指定できないフラグの組み合わせが
あるからそういうときはsysopen使うけど。
0084nobodyさん
2005/12/14(水) 11:10:22ID:???話した人ってのは、メリットを話した上で勧めたんだろ?
だから、「sysopenのメリットはわかるのですが」と書いてある。
…で、>>81は多くがopenの方が使われてるのを疑問に
思ったんじゃないの?
あと、何故勧めないのか書かないと回答にならんよ。
>>81
漏れは>>83と同じようにフラグ用の定数用意がめんどう。
パイプ等はあまり使わないから、sysopenでも良いんだけどね。
008573
2005/12/14(水) 12:37:52ID:???sort { $b <=> $a }でソートされるのはわかったんですが、
どこに記述すればいいのかわかりません。
21行目に、sort {$b <=> $a} %count と書くと、ソートされた数字のみが表示されてしまいます。
0086nobodyさん
2005/12/14(水) 13:36:36ID:???sysopen()は環境によって使えなかったりするモードがある。
例えばWindows環境ではロック関連が使えないとか。
それを注意していれば特に問題はないよ。
>>85
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST
> # this sorts the %age hash by value instead of key
> # using an in-line function
> @eldest = sort { $age{$b} <=> $age{$a} } keys %age;
0088nobodyさん
2005/12/14(水) 21:24:43ID:S7xP2RtY全半角英数字・全角日本文字(ひらがな・カタカナ・漢字)以外の文字
が入っているか判定したいのですが、
そのための正規表現を教えてもらえませんか、文字コードはEUCです。
0089nobodyさん
2005/12/14(水) 21:49:35ID:???>8にあるサイトが詳しいので良く読むといいよ
0090本日@挫折90%
2005/12/14(水) 22:43:42ID:SzJP4ieY等勉強したのですが、perlプログラムのサンプルを見たのですが、
まったく桁が違うすごいプログラムでした、このまま本の通りに
覚えていけばいいのか、正直不安になりました、このまま、焦らずに
本書どおりに進めていいのでしょうか?
熟練した方もしいい教材などありましたら、参考におしえてください。
0091本日@挫折95%
2005/12/14(水) 22:45:21ID:SzJP4ieY0092nobodyさん
2005/12/14(水) 22:50:34ID:???バット二三回振って打てねーよとか言われても誰も相手しないよ
0093nobodyさん
2005/12/15(木) 00:33:35ID:???最初から全てを理解できる人が居たら、それは天才。
他人が書いたperlのソースをスラスラ読めるようになったら上級者。
(ピンキリあるし、神レベルのコードはそれはそれで読むのが難しい。)
0094nobodyさん
2005/12/15(木) 01:11:02ID:???文章(コード)中に知らない文法やら単語がいっぱいでてくるところだろうな。
わからないところはとりあえず飛ばせばOKくらいでやらないと
学校の勉強に慣れてきた人間には正直ツラいと思う。
0095nobodyさん
2005/12/15(木) 01:37:31ID:w2M1wJUgopenはパイプ文字による外部プログラブが実行可能です。
「ブラウザで入力した情報をformにて送信して、
その情報のファイル名を表示するなんてCGIを作った場合、
入力文字にパイプを混入されるとセキュリティ上危険(入力文字検査すればOK)」
が理由のアドバイスかもね。
0096nobodyさん
2005/12/15(木) 08:39:34ID:???{
local *FH;
-f $file or die "No such file.\n";
open FH, '<' . $file or die $!;
while (<FH>) { ++$count{$_} for 「 (.*?) 」/g }
close FH;
}
header(-charset => $charset),
start_html(-encoding => $charset, -lang => 'ja'),
table(Tr([ map td([ $_, $count{$_} ]), sort keys %count]) ),
end_html,
文中の単語の数を数えるスクリプトなんですが、
「x回以上出た場合はbgcolorをredにする」という風にしたくて、
if(5<$count{$_}){$bg="orange";}を追加して、
tr部分に{-bgcolor=>$bg}を追加したんですが、上手く変わってくれません。
どなたかご教授お願い致します。
0097nobodyさん
2005/12/15(木) 08:43:28ID:???009896
2005/12/15(木) 08:45:17ID:???CGI.pmっていうのがそもそも何なのか・・・
0100nobodyさん
2005/12/15(木) 09:30:08ID:???いくらPerlでもこんな自由な書き方できないだろ?
0101nobodyさん
2005/12/15(木) 11:20:29ID:???こっちのスレから誘導されてきたやつだ
0102nobodyさん
2005/12/15(木) 12:17:37ID:???{
local *FH;
-f $file or die "No such file.\n";
open FH, '<' . $file or die $!;
while (<FH>) { ++$count{$_} for 「 (.*?) 」/g }
close FH;
}
if(5<$count{$_}){$bg="orange";}
header(-charset => $charset),
start_html(-encoding => $charset, -lang => 'ja'),
table(Tr([ map td({-bgcolor=>$bg},[ $_, $count{$_} ]), sort keys %count]) ),
end_html,
こんな感じで書きました。
>>100
for 「 (.*?) 」/gのほうは問題なく動作してます
0103nobodyさん
2005/12/15(木) 13:38:24ID:???while (<FH>) {...}を抜けた直後は$_はundefになってる筈なので、
そこで
if(5<$count{$_}){$bg="orange";}
などとやっても意味がない。
直し方としては、どれか一つでも5を超えたら全部色をかえたいのか
5を超えたやつだけ色を変えたいのかで違ってくるが、説明が不明瞭
なのでなんともいえんな。
0104nobodyさん
2005/12/15(木) 13:49:29ID:tLuO4r1h$string =~ s/\r//;
$string =~ s/\n//;
という処理をしたら
出力したときに#2#の結果になります。
1行目は確かに文字列から改行が取り除かれていますが、
3、4行目は変わっていません。
すべてに対して改行を取り除く方法ってありますか?
# 1 ####################
お願いします
おねがいします
本当
おねがいします"
########################
# 2 ####################
お願いしますおねがいします
本当
おねがいします
########################
0105nobodyさん
2005/12/15(木) 13:52:52ID:???0106nobodyさん
2005/12/15(木) 13:55:39ID:???0107nobodyさん
2005/12/15(木) 13:59:42ID:???0108nobodyさん
2005/12/15(木) 14:01:43ID:tLuO4r1hできました。
ありがとうございます!!!
0109nobodyさん
2005/12/15(木) 14:10:23ID:???できれば5区切りで色を変えたいと思ってます。
10以上黄色、15以上オレンジ、20以上赤みたいな感じです。
お手数ですがお願いします。
0110nobodyさん
2005/12/15(木) 14:15:52ID:???0112nobodyさん
2005/12/15(木) 14:31:42ID:???わかりました。有難うございました。
0113nobodyさん
2005/12/15(木) 15:19:56ID:tLuO4r1helse {if ($csv) {$csv_data .= '0,';}}
formから渡された「どのようにして」に”インターネット”というキーワードが入っていた
場合、1というデータをCSVファイルに挿入したいんですが、
どうやら、上の記述に間違いがあるみたいです。
記述ミスありますか?
0114nobodyさん
2005/12/15(木) 15:23:56ID:???0115nobodyさん
2005/12/15(木) 15:26:36ID:tLuO4r1h使ってますねwww
どうすればいいのかな?対処方法知ってたら教えてください
0116nobodyさん
2005/12/15(木) 15:29:56ID:???/\Qインターネット\E/
http://perl.misty.ne.jp/meta.html
0117nobodyさん
2005/12/15(木) 15:34:15ID:tLuO4r1hサンクス。 htmlからフォーム渡すとき
この部分だけ valueを 日本語から 数字に変えて渡したら上手くいったよ。
SHIFT JISややこしいね。
0118本日@挫折0%
2005/12/15(木) 18:44:33ID:3wI62WI7今後ともよろしこお願いします。
0119nobodyさん
2005/12/15(木) 21:41:38ID:???0120nobodyさん
2005/12/15(木) 22:02:39ID:???0121nobodyさん
2005/12/15(木) 22:26:35ID:???はいはい、ここまでカット
0122俺の日記@パールちゃん
2005/12/15(木) 23:41:06ID:3wI62WI70123nobodyさん
2005/12/15(木) 23:46:19ID:???=cut
0124nobodyさん
2005/12/16(金) 00:03:04ID:???最強
0125nobodyさん
2005/12/16(金) 01:21:20ID:???0126nobodyさん
2005/12/16(金) 03:05:21ID:???0127nobodyさん
2005/12/16(金) 05:31:09ID:nqW99XKPヒアドキュメント使うとソースが見づらいorz
0129nobodyさん
2005/12/16(金) 18:01:05ID:???0130nobodyさん
2005/12/16(金) 18:09:46ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perltrap.html#C_Traps
0131cbi-cgi/count/dayx.cgi?gif
2005/12/16(金) 19:52:49ID:u8eearJF0132カウンター2日目
2005/12/16(金) 19:58:13ID:u8eearJF.txtに変換
16<>1000<>2000<>3000<>fri<><>
0133nobodyさん
2005/12/16(金) 21:22:32ID:Nkz0ct/3その際リンクを、順番ではなくランダムで表示するようにしたいんです。
それぞれのページで、重複したリンクが表示されないようにしたいのですが、
具体的にどのようにコーディングすれば良いのでしょうか?
0134nobodyさん
2005/12/16(金) 21:26:03ID:???0135nobodyさん
2005/12/16(金) 21:30:13ID:???0136nobodyさん
2005/12/16(金) 21:43:16ID:Nkz0ct/3それをパラメータとしてURLに含めるといった感じの処理でいいんでしょうか?
0137nobodyさん
2005/12/17(土) 00:09:34ID:???それを順番に出力すりゃいいんじゃね?
参考になるかわからんが、こんなんどうよ
@array=();
for ($count = 0; $count < 7; $count++) {
push(@array,$count);
}
&shuffle (\@array);
sub shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i;) {
my $j = int rand ($i + 1);
next if $i == $j;
@$array[$i, $j] = @$array[$j, $i];
}
}
0140nobodyさん
2005/12/17(土) 18:08:47ID:???2.ページ移動用のスクリプトを用意して、ページ移動用のリンクに全部埋め込む
3.SSIを利用して、リンクの部分を別ファイルで用意する
一定時間ごとに混ぜるのなら3.でもいいけど、
訪問者ごとに違う順番を見せるのなら3.は向かない。
2が一番無難。
って答えでいいかしらん。
0142nobodyさん
2005/12/17(土) 21:16:26ID:6Cij4iqn戻ったりすると「有効期限切れ・・・・」という画面がでますが
そういう仕組みってどうすればいいんですか?
perlからすこしそれた質問かもしれませんが教えてもらえませんか?
0144nobodyさん
2005/12/17(土) 21:51:48ID:???アップロードされたファイルの、保存される前のファイル名の取得方法をおしえてください。
おねがいします。
0145nobodyさん
2005/12/17(土) 22:07:09ID:???観察してみろと。
0146nobodyさん
2005/12/17(土) 23:16:57ID:???0147nobodyさん
2005/12/18(日) 03:17:23ID:3ossMEQR警告 : ページの有効期限切れ
が出ます。
少し調べてみたところ、入力フォームがあるとこうなるらしいですね。
入力フォームを残したまま、エラーを出させないようにすることは出来ないでしょうか?
よろしくお願いします。
0148nobodyさん
2005/12/18(日) 05:12:35ID:7vISx30Wperlとは関係無いこと
外池
0150nobodyさん
2005/12/18(日) 15:57:02ID:???どのようにしてチェックできますか?
よろしくお願いします。
0151nobodyさん
2005/12/18(日) 18:11:14ID:???何がやりたいのか意味不明
0152150
2005/12/18(日) 18:22:15ID:???1万件のリンクをリンク切れかどうかチェックするスクリプトを作りたかったのですが、
何とか自力で作ることができました。
解決です。m(_ _)mぺこり
0153nobodyさん
2005/12/18(日) 20:24:45ID:???0154nobodyさん
2005/12/18(日) 20:26:52ID:???0156nobodyさん
2005/12/18(日) 23:12:38ID:7vISx30W以上。
>>155
文も読めないやつはマズは国語から学べよチンカスが
ほかいけや
0157nobodyさん
2005/12/19(月) 00:33:37ID:???multipart/form-dataのときにもexpireヘッダって効いたっけ?
前にテストしたとき効かなかった(というよりはキャッシュのセキュリティで弾かれたっぽい)記憶があるんだけど?
0158nobodyさん
2005/12/19(月) 00:53:51ID:???http://pc8.2ch.net/test/read.cgi/php/1126436361/
0159nobodyさん
2005/12/19(月) 01:41:23ID:???0160nobodyさん
2005/12/19(月) 01:42:18ID:???という警告はブラウザの機能だから、サーバ側では操作できないと思うが。
これとは違うのだろうか。
0161nobodyさん
2005/12/19(月) 01:57:53ID:mSKnbNI+プロクソミトロン
0162nobodyさん
2005/12/19(月) 10:37:15ID:???rand関数についての質問ですが
$i = int(rand(100));
$i には、0 〜 99 の乱数がセットされる
と、とあるサイトに説明されていたのですが、この例の場合100が
セットされることはあり得るんでしょうか?
int関数は小数部分を切り捨てて整数化するので100を返す場合は100.000…
以外ないと思うので確率的に考えて自分で実際にプログラム作って試して調べるのは
とてもじゃないですが無理だと思いますので、どなたか教えてください。
0163nobodyさん
2005/12/19(月) 10:54:10ID:???perldocにあった気がしたけどURL忘れた
0165nobodyさん
2005/12/19(月) 11:08:36ID:???for (1 .. 1000000){
100 <= rand(100) and print "100 Over.\n";
}
0166nobodyさん
2005/12/19(月) 11:14:46ID:???0168nobodyさん
2005/12/19(月) 15:14:31ID:nE/lruN5英語のフォームページを作っています。
htmlの中で
<html lang="en">と
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
として英語用にしています。
フォーム自体はきちんと動くのですが、届いたメールのタイトル(件名)が文字化けします。
「英語ページよりお問い合せ」が「英語ペ?[ジよりお問い??ケ」になります。
英語ペ\ージよりお問い\合せとか英語\ペ\ー\ジよりお問\い\合\せなど試してみたのですが、うまくいきません。
jcode.plはcgiの中に読み込んでいますが、ページの内容が英語しかない場合は日本語を完全には使えないのでしょうか?
0169nobodyさん
2005/12/19(月) 15:20:26ID:???http://www.atmarkit.co.jp/fnetwork/rensai/netpro03/netpro01.html
ここの前編と後編読んでからもう一度来いや
0170168
2005/12/19(月) 16:02:23ID:???■日本語はテキストではない?〜テキストの送受信
を読んで、単純に
Content-Type: text/plain; charset="ISO-2022-JP"
を
Content-Type: text/plain; charset="SJIS"
に変えたらいいのかな、って思いましたがうまくいきませんでした。
http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html
の●一般的なヘッダでの利用を読んで
subject:のところに=?ISO-2022-JP?B?と?=を入れて、
その間にタイトル(件名)として使う文章をbase64で変換した文字を入れました
ttp://phpspot.net/php/pgbase64%83G%83%93%83R%81%5B%83h%83c%81%5B%83%8B.html
は何故かうまくいかなかったので
ttp://www.vector.co.jp/soft/win95/util/se139646.html
でbase64に変換しました。
これでできました。ありがとうございました。
0171nobodyさん
2005/12/19(月) 17:13:11ID:mSKnbNI+小数点以下がどれくらい続くかは知らない
0173nobodyさん
2005/12/19(月) 19:55:13ID:???0174nobodyさん
2005/12/19(月) 20:12:41ID:???0175nobodyさん
2005/12/19(月) 22:15:36ID:M/zhZkxT頑張ればPerl/CGIで簡単な掲示板を作れるかも、という程度でしょうか。
現在、HTML::Templateを使ってコーディングしています。
テンプレートファイル内から TMPL_VAR でパラメータを渡す時、
$template->param(
'PARAM_1' => $var { 'PARAM_1' } ,
'PARAM_2' => $var { 'PARAM_2' } ,
'PARAM_3' => $var { 'PARAM_3' } ,
);
というようにやるところを、
出来るだけ動的に行いたいと思っています。
テンプレートファイル内のパラメータ PARAM_XX に対し、
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、
どのようにコーディングすれば良いでしょうか。
自分なりに、環境変数一覧を書き出すプログラムを参考にして
foreach my $key ( keys %var ) {
$template->param ( $key => $var { $key } ) ;
}
と書いてみたのですが、値が渡された様子はありませんでした。
0176175
2005/12/19(月) 22:25:36ID:???誤:
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、
正:
ハッシュ $var { 'PARAM_XX' } の値を渡せるようにしたいのですが、
それと、Perlのバージョンは5です。
0177nobodyさん
2005/12/19(月) 22:46:36ID:???% perl -e 'use HTML::Template; $t = HTML::Template->new(scalarref => \ "A=<TMPL_VAR NAME=A>\nB=<TMPL_VAR NAME=B>\n"); %h=(A=>"foo", B=>"bar"); foreach $k(keys %h){$t->param($k=>$h{$k});} print $t->output;'
A=foo
B=bar
(@_@)
0179nobodyさん
2005/12/19(月) 23:18:48ID:???(10分後)
変数名違ぇじゃん… orz
ご迷惑おかけしました。
俺の半日はなんだったんだ。
0180nobodyさん
2005/12/19(月) 23:30:59ID:mSKnbNI+0181nobodyさん
2005/12/20(火) 00:11:38ID:???0182nobodyさん
2005/12/21(水) 09:34:15ID:m1/a3jED■ このスレッドは過去ログ倉庫に格納されています