Perlコーディング初心者質問スレ Part 48
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/04/26(水) 18:00:50ID:RLbnve1J【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0853850
2006/05/26(金) 04:05:03ID:VJllj5+q実行したら動かないし
0854nobodyさん
2006/05/26(金) 04:06:44ID:???有効期限機能のあるアプロダを使う
>>850
別に必要ではないよ。 , (カンマ)でもOKだし他にも方法あり。
' と " の対応に注目すると吉。
0856nobodyさん
2006/05/26(金) 04:32:32ID:???print '<form method="post" action="' . $reload . '">' . "\n";
「<form method="post" action="」という文字列
「$reload」というスカラ変数
「">」という文字列
「\n」という文字列
を結合した結果を print している。
0858850
2006/05/26(金) 05:40:00ID:VJllj5+qありがとうございます
結合っての確か見た記憶があります
0859nobodyさん
2006/05/26(金) 09:18:33ID:???0860nobodyさん
2006/05/26(金) 14:26:31ID:???0861nobodyさん
2006/05/26(金) 15:03:21ID:???0864nobodyさん
2006/05/26(金) 23:55:16ID:???0865nobodyさん
2006/05/27(土) 00:17:15ID:Ea6+r9JBhttp://www6.ocn.ne.jp/~katoyuu/
ニュースの部分を切り出して(<!--テンプレ-->でかこまれているところ)
かつ、リンクとコメントを抽出したいのですが、どのようにすればできるでしょうか?
0866nobodyさん
2006/05/27(土) 00:26:19ID:???0867nobodyさん
2006/05/27(土) 02:16:48ID:???大雑把に。
foreach(split(/\n/, $data)){
push(@news, $_."\n") if (/<!--テンプレ-->/.../<!--テンプレ-->/);
}
それと、一応個人サイトへのリンクは、h抜いて書いて。
0868nobodyさん
2006/05/27(土) 03:19:39ID:???なんで?
0869nobodyさん
2006/05/27(土) 03:46:52ID:???自分のサイトのアクセス解析で2chから大量に来てたら、
ちょっとヒくんじゃね?
0870nobodyさん
2006/05/27(土) 03:50:24ID:???と喜んでました。
で、プロバイダ(ぷらら)に上げたら動きませんでした。
ググって見ると「nifty plala biglobeなどは他サーバへのアクセスができないようになってるので無理」
なる情報を見つけました。
これはあきらめるしかないのでしょうか?
0873nobodyさん
2006/05/27(土) 04:29:51ID:???そうですね。モジュールの調べ方は知らないので明日調べてみます。
plalaのサイトにはPerlのバージョンは5.8と書いてありました。(Perlに関してはそれだけ)
私が自分のWinにインストールしたのはActivePerlの5.8xxxです。
Jcode.pmがデフォで入ってないのにびっくりしました。jcode.plを使ってます。
LWPは、動かなかったのでプロバイダにモジュールがないのかな?
と思いsite/libのLWPディレクトリをUPしてみましたが駄目でした。
LWPとは別にHTTP::Liteなるものもあるようなので明日試してみます。
もし、plalaで(LWP||HTTP::Lite)を(使えてる||使えてない)な人がいらっしゃいましたら
情報くださると助かりますです。
#「push @a, $b」と「push(@a, $b)」はどっちにすべきですか?
0874nobodyさん
2006/05/27(土) 04:49:10ID:???本題とはそれるけど、
5.8なら Jcode.pm っていうか Encode.pm が入ってるから、そっち使えばいいと思うよ。
jcode.pl じゃユニコのデコエンコできないからねえ。
push () は自分で見やすいほうを。
あとniftyは、今はどうか知らないけど、標準モジュールとか何も入ってなかったとオモタ。
0875nobodyさん
2006/05/27(土) 04:49:52ID:???plalaはデフォでJcode入ってるよ。
サーバー間通信がそもそも出来ないように設定してあるのでどうやってもLWPは使えない
それと、普段は前者だが引数が二つ以上なら
push @a, ( $b, $c );
とかやるかも。
0876nobodyさん
2006/05/27(土) 04:58:19ID:???> 自分のサイトのアクセス解析で2chから大量に来てたら、
> ちょっとヒくんじゃね?
そもそもマナーとは何かだよね。
でさ、何で「ヒく」んだろう。
0877nobodyさん
2006/05/27(土) 04:59:20ID:???恐らく、デーモン的な使われ方を阻止する為でしょう。
つまり、セキュリティ上の仕様ではないでしょうか。
pushについては私は前者の方が簡潔で好きですけど、
カッコを付けないと、優先順位の問題が置きやすいので、一長一短です。
Perlのコードは十人十色(TMTOWTDI)なのでお好きにどうぞ。
優先順位の問題は例えば print ($a + $b), " is answer"; と書くと
" is answer" が無視されてしまいます。これを防ぐには
print (($a + $b), " is answer"); のようにカッコをつける必要がります。
または print +($a + $b), " is answer"; のように前に「+」をつけてもいいですけど。
0878nobodyさん
2006/05/27(土) 05:06:49ID:???#!/usr/bin/perl
use File::Find;
print "Content-type: text/html;\n\n";
find(\&wanted, @INC);
sub wanted {
if(/\.pm$/i){print "$File::Find::name<br>\n";}
}
0879nobodyさん
2006/05/27(土) 05:09:04ID:???こちらへどうぞ。
初心者の質問
http://etc3.2ch.net/qa/
0880873
2006/05/27(土) 17:45:38ID:???ありがとうございました。
モジュールの取得も参考になりました。
2chでこんなに丁寧に回答してもらったのは初めてです。
無駄にHTTP::Liteとかも試してみましたが当然だめでした。
あきらめることにします。
0881nobodyさん
2006/05/27(土) 20:52:04ID:/9Ndz8t/で$noname=名無しさんって感じになってるんだけどコレだとクッキー保存されちゃって
次回からはこの名前を一回消して自分のHNに変える必要がある。
だからこの名無しの時だけ次回からは名前欄が空欄とか名無しじゃないときのHNにしておくみたいな事出来る?
説明下手だがこんな事をしたい。
0882nobodyさん
2006/05/27(土) 21:06:43ID:???クッキーの情報を使いたくない時には、そうなるように書けばいいだけ。
0883nobodyさん
2006/05/27(土) 21:15:40ID:/9Ndz8t/0884nobodyさん
2006/05/27(土) 21:27:21ID:???みたいのを用意すれば、if ($name eq "") { $name = $noname; } しても
$in{'name'} に $noname が代入されませんよ、とか。
別に必ず $in{'name'} をそのままクッキーに保存しなきゃいけないわけじゃないし
クッキーから読み出した前回投稿時の名前を仕舞っておく変数ぐらい
あってもいいよね、とか。
方法はいろいろ。
0886nobodyさん
2006/05/28(日) 06:25:30ID:LqLk4cEL$jump_url=~s/(\W)/'%' . unpack('H2',$1)/eg;
という構文の解読の仕方が分からないのですが、この説明をお願いできませんか?
どういうことをしている構文なのでしょうか?
0888nobodyさん
2006/05/28(日) 06:56:06ID:LqLk4cEL朝早くから答えて頂きましてどうもありがとうございました!
教えて頂いたキーワードで只今ググって来ました。
エンコードをしているのは分かるのですが
この構文の流れを説明していただけないかと思いまして。
お願いします!教えてください!
まず分からないのは、
=~s/(\W)/'%' と unpack('H2',$1)/eg の間にある "." なのですが
正規表現の結果を足しているという事なのでしょうか?
何の為に???????(x_x)?
と思って全く発想が浮かびません。。。
ヒントだけでも頂けないでしょうか?
ちなみに、perlの辞書を片手に頑張ってはいるのですが
自分の未熟さに頭が上がりません。。。
よろしくお願いします!!
0889nobodyさん
2006/05/28(日) 08:55:15ID:???s///が正規表現による置換。オプション'e'と'g'。
(\W)
マッチさせる正規表現。
'%' . unpack('H2',$1)
本来置き換える文字列だけど、'e'がついてるから実行する文。
あとは辞書で。
0890nobodyさん
2006/05/28(日) 10:59:02ID:???1,あいうえお,142
2,かきくけこ,127
3,さしすせそ,139
というファイルがある時、この3列目が多い順に行をsortし表示するには
どうすればよいですか?
0891nobodyさん
2006/05/28(日) 11:01:39ID:???この3列目が多い順に行をsortし2列目を表示するには
どうすればよいですか?
でした。よろしくお願いします。
0892nobodyさん
2006/05/28(日) 11:32:27ID:LqLk4cELありがとうございました。
期待していた回答とは違いましたが、この辞書とネットを使いながらいろいろ試してみます。
0894nobodyさん
2006/05/28(日) 11:48:40ID:???open(F, 'file.txt');
while (<F>) {
chomp();
push(@data, [split(/,/)]);
}
close(F);
@data = sort {$b->[2] <=> $a->[2]} @data;
foreach (@data) {
print $_->[1], "\n";
}
0895nobodyさん
2006/05/28(日) 14:52:39ID:???「perl test.pl」で以下のコードを実行したのですがファイルを開けません。
何か書き方が悪いんでしょうか。
test.plの内容:
my @buf, $line;
if(! open(IN, "<file.txt")){
@buf = <IN>;
foreach $line (@buf){
print $line;
}
close(IN);
}
* if( -e "file.txt"){}でチェックしたところファイルは存在していました。
* 環境はWinXPHomeSP2 + ActivePerl v5.8.6 です。
0897895
2006/05/28(日) 15:00:28ID:???0898nobodyさん
2006/05/28(日) 16:20:50ID:LqLk4cELすみません。教えて頂いたその方法でやってみたのですが
何度やってもエラーになってしまいます。何故でしょうか?
0899nobodyさん
2006/05/28(日) 16:32:42ID:???なんてエラーでてるのか書きなよ。
ブラウザで print "Content-type: text/html\n\n"; 忘れてるとかだったらはたかれるよ。
0902nobodyさん
2006/05/28(日) 22:29:52ID:???0903nobodyさん
NGNG0904nobodyさん
2006/05/28(日) 23:07:43ID:???に、10ガバス
0905nobodyさん
2006/05/29(月) 08:12:56ID:???はらたいらに100点並
0906nobodyさん
2006/05/29(月) 09:30:26ID:???0907bc
2006/05/29(月) 14:43:29ID:BOZTb2Dkでラジオボタンって作れるんですか??
HTMLのフォームと違うんですけど
これだとただの表示されるだけじゃないんでしょうか??
0908nobodyさん
2006/05/29(月) 15:03:55ID:???> でラジオボタンって作れるんですか??
作れません。
> これだとただの表示されるだけじゃないんでしょうか??
その通りです。で、何か問題でも?
0909nobodyさん
2006/05/29(月) 15:58:10ID:???ここから○○を抜き出すことはできます
これを数字として扱って比較したいのですが、どうしたらいいですか?
時間や分は「09時05分」などと必ず二桁で保存されています
0910nobodyさん
2006/05/29(月) 16:00:00ID:???0911nobodyさん
2006/05/29(月) 16:04:23ID:???<=> を使え。
「必ず二桁」なら文字列比較でも結果は変わらないはずだけど。
SEE ALSO
perldoc -f sort
0912909
2006/05/29(月) 16:08:04ID:???有り難うございます
0913907
2006/05/29(月) 17:23:20ID:BOZTb2Dkこのサイトのラジオボタンのうけ渡し方で
HTMLのソースと書いてあるんですが
それはHTMLのソースが間違っているということですか??
0914nobodyさん
2006/05/29(月) 17:47:57ID:???0915nobodyさん
2006/05/29(月) 17:48:21ID:???> それはHTMLのソースが間違っているということですか??
いいえ。
そのページの言う HTML ソースというのは
http://www.kumagaya.or.jp/~chichibu/form_rb.html
の「ページのソース」のことだと思います。
だとしたら特に間違ってはいません。
http://www.kumagaya.or.jp/~chichibu/cgi-prog/form_rb.txt
は上記ページのフォームから値を受け取り、結果表示を行うスクリプトのソースです。
ですからそこにラジオボタンを表示するコードが含まれていなくても別段問題ありません。
正直、あなたが何を問題とされているのか良く分かりません。失礼ですが基礎的な理解が不足しているように見受けられます。
このまま質問を続けられると、あなた宛にあまりフレンドリーでないレスが殺到する可能性があり、それは我々としては大変迷惑なので、WWW、HTML 等の基礎を学んでから出直されることをお勧めします。
0916nobodyさん
2006/05/29(月) 17:49:47ID:???0918nobodyさん
2006/05/29(月) 20:12:07ID:???0919nobodyさん
2006/05/29(月) 20:31:40ID:???君の質問の仕方が下手なのと、>>915さんって親切だなって思った。
そして、その参考にしてるサイトは駄目駄目なので他所を探すことをおすすめします。
サンプル動かして、表示されたページが文字化け万歳とか哀しかったです orz
0920907
2006/05/30(火) 00:06:24ID:B/4ya/Hvすげー勘違いしてました
>>919
でもサンプルが詳しいサイトはあんまりないんですよ
探したんですが
0921nobodyさん
2006/05/30(火) 00:18:38ID:D128RUeT>890さんじゃないけど
file.txt
1,あいうえお,0-1-8
2,かきくけこ,1-3-2
3,さしすせそ,1-9-4
この3列目の ○-△-□ の △ の数が多い順に行をsortして、その行の2列目を表示するための方法を教えてください
0922nobodyさん
2006/05/30(火) 00:29:16ID:???open(F, 'file.txt');
while (<F>) {
chomp();
($num, $name, $value) = split(/,/);
$value = (split(/-/, $value))[1];
push(@data, {name => $name, value => $value});
}
close(F);
@data = sort {$b->{value} <=> $a->{value}} @data;
foreach (@data) {
print $_->{name}, "\n";
}
0923nobodyさん
2006/05/30(火) 01:11:36ID:D128RUeT>922さん
ありがとうございます
早速試してみます
0924nobodyさん
2006/05/30(火) 01:20:49ID:D128RUeT質問してもいいですか
6行目の push(@data, {name => $name, value => $value}); の部分なのですが
右から2番目の value は $value じゃなくても良いのですよね?
他にも{}の中にあるもので $ が付いていない箇所があるのですがこれで正しいのですよね!
わたしには初めてで読めなかったので、参考に6行目の説明をお願いできませんかm(*u_u)m
0925nobodyさん
2006/05/30(火) 01:32:02ID:D128RUeT今アップしてみたのですが正しく表示できました!
出来たものの、>922さんが書かれた文の意味は分かりません。。。
どうか教えてもらえませんか?
0926nobodyさん
2006/05/30(火) 01:33:17ID:???ええと、ハッシュは知ってるかな。
%hoge = ("name" => $name, "value" => $value);
みたいなやつね。
このキーの部分のダブルクオーテーションは、省略できることになってる。
%hoge = (name => $name, value => $value);
みたいにね。
で、右辺を()でなくて{}で囲うと、ハッシュのリファレンスになる。
リファレンスが分からなかったら、ネットか書籍で調べて。
それが6行目の{name => $name, value => $value}
ハッシュはスカラーなので、
$hoge = {"name" => $name, "value" => $value};
と代入できる。
この$nameを取り出すのが、$hoge->{"name"}なんだけど、
このダブルクオーテーションも省略できるので、9行目の
$a->{value}みたいな書き方になる。
詳しくは、「ハッシュ リファレンス」でググってね。
0927nobodyさん
2006/05/30(火) 01:37:27ID:???0928nobodyさん
2006/05/30(火) 01:41:26ID:D128RUeTわぁ♪ありがとうございます!早速ググってきますっ
0930nobodyさん
2006/05/30(火) 04:36:25ID:???正直 CSV ソートの質問は秋田(;´Д`)
0931nobodyさん
2006/05/30(火) 05:26:45ID:D128RUeTsyntax error at ./sub.cgi line 67, at EOF
./sub.cgi had compilation errors.
というエラー文が出ているのは、どんな意味なのでしょうか?
0932nobodyさん
2006/05/30(火) 06:07:15ID:???「EOFまで行っても } が足りないですよ。はい、コンパイルエラー」
閉じ忘れたカッコを頑張って探してください。
エラーメッセージの意味がわかんないと毎回同じように困るわけで、
Excite翻訳を利用したりして、慣れるようにしてください。
>>930
随分前(テンプレが桂三枝で始まってた頃)に、FAQ・いい回答を
載せるCGIを提供してくれた人がいたような…どうなったか覚えてないんだけどね。
0933nobodyさん
2006/05/30(火) 06:53:05ID:D128RUeTありがとうございました!地道に探してたら括弧をエスケープしているのに気が付きました。
それでまたエラーが出てきたので、Exite翻訳を利用して解決しようとしたところ
[baby.html:?:warn] Malformed UTF-8 character (2 bytes, need 1) in array dereference.
というエラーなのですが
[baby.html:、:、警告、]、アレイ反参照の奇形のUTF-8キャラクタ(2バイト、必要性1)。
という結果になって意味が分かりません(P口`q。)".
これはどういう意味なのでしょうか?
0934nobodyさん
2006/05/30(火) 07:01:17ID:D128RUeTログにあるデータを数ページ分吐き出すようにしているのですが
一部のページのみにこのエラー文出てしまいます。
サーバのスペックが低いからでしょうか。。。?
0935nobodyさん
2006/05/30(火) 08:49:24ID:???恐らくログにWindowsの外字とか、UTF-8で扱えない文字が入っているはず。
根本的解決には本人にそれなりの知識とそれなりの技術が必要。
文字コードがらみの処理はややこしいので、改造レベルの人はあきらめるのが吉。
# というかデフォでwarning入ってんのか?
0936nobodyさん
2006/05/30(火) 09:39:52ID:???その行晒せや。
0937nobodyさん
2006/05/30(火) 11:01:23ID:???ログの何行目というエラーの出方ではないので「その行晒せ」は無理だろう。
(質問者に、そこを調べて提出せよというのは難しそう)
0938nobodyさん
2006/05/30(火) 12:28:11ID:RehvEaNHとエラーになりファイルオープンできません。権限で怒られているのはなんとなく分かるのですが
対処法を教えてください。よろしくお願いします。
※aaaaa.txtというファイルは存在しません。
※cgiファイルのパーミッションは777です。
1 open(OUT, '>aaaaa.txt') or die "$!";
2 print OUT "abcde";
3 close(OUT);
0939nobodyさん
2006/05/30(火) 12:34:02ID:???0940938
2006/05/30(火) 12:38:16ID:???影響の無いディレクトリではオープンできました。
お騒がせしました。
0941nobodyさん
2006/05/30(火) 21:18:16ID:???それじゃああんま面白くないし、2〜3行に渡ってやってみたいんだけど、そういうのってなんかある?
なんか知ってたり面白いの思いついたら教えてください。(´▽`)ノ
0942nobodyさん
2006/05/30(火) 21:27:57ID:???0943nobodyさん
2006/05/30(火) 21:48:36ID:???0944nobodyさん
2006/05/30(火) 21:56:09ID:???print 'Hello World !!';
はいいけど、
print <<__EOT__;
Hello World !!
__EOT__
とか、なんか味気ないし1行じゃ意味ない感じでさあ。
0945nobodyさん
2006/05/30(火) 22:20:42ID:???>>943みたいなのとか、環境変数を全部吐くのとか、
「とりあえず動くことの確認」みたいなサンプルだったら、そういうのでいいのでは?
「いや、そうじゃなくて、こう、なんていうか、アレだよアレ」な場合(?)は
「エラストテネスのふるい」でぐぐるなり何なり。
0946nobodyさん
2006/05/31(水) 01:06:18ID:8kzUocWY昨日の質問の続きなんですけど、ずっとわたしひとりで考えても分からなかったので教えてください(P口`q。)".
昨日聞いたものをsub readとして、下のどこかで&readしてHTMLに表示させたいんですけどどうしてもできません・゚・(PД`q)・゚
sub print{
local($jump_url);
if($EST{rank_fl}){
$jump_url=$Slog[2];
$jump_url=~s/(\W)/'%' . unpack('H2',$1)/eg;
$jump_url="$EST{cgi_path_url}$EST{rank}?mode=link&id=$Slog[0]&url=$jump_url";
}
else{$jump_url=$Slog[2];}
print<<"<!--HTML-->";
<!-- ログ\表\示 -->
<hr size=1 color=black>
<strong>[IN $in_pt][OUT $out_pt]</strong><br>
<a href="$jump_url"><b>$Slog[1]</b></a>
<br>
<!--HTML-->
print<<"<!--HTML-->";
$Slog[6]<br>
<!--HTML-->
}
foreach $line(@log_lines){
@Slog=split(/<>/,$line);
&print;
}
訪問ランキングスクリプトです。意味が分からなかったらファイルをお渡しします。 よろしくお願いしますm(*u_u)m
0947nobodyさん
2006/05/31(水) 01:19:05ID:???「@log_lines」 がファイルの中身なら、
「foreach $line (@log_lines) {」
の前で 「&read」 ?でソートさせにいけばいいんじゃない?
それでもできないなら、上で答えてくれたソースをその 「&read」 でどう改造して使ってるかによるな。
0948nobodyさん
2006/05/31(水) 01:21:31ID:8kzUocWYsub read の中で、file.txt というファイルを読み込んで
1,あいうえお,0-1-8
2,かきくけこ,1-3-2
3,さしすせそ,1-9-4
この3列目の ○-△-□ の △ の数が多い順に行をsortして、
その行の2列目を@log_lines に格納する準備をしておいて
その後のsub print の中で@log_lines を利用してHTMLに吐き出すという事がしたいのですが
見ての通りsub print はテンプレート化したもので、sub read はcgiファイルなので別々のものを
うまく組み合わせるのに困っています(u_`u。)
sub read はlocal関数を使って、後々問題にならないようにしてみたりしたのですが
実際に起動させて見るとどれもうまくいきませんでした。....ρ(。 。、 )
ちからを貸していただけませんか?(*u_u)☆
0949nobodyさん
2006/05/31(水) 01:43:02ID:8kzUocWYお返事ありがとうございます゚+.(・∀・)゚+.゚+.゚
いろいろ試してみてたのでめちゃくちゃになってるんですが貼ってみます。
sub read{
$file="file.txt";
@log_lines=(); #表示データリスト
%Clog=(); #各カテゴリの登録数
local(@temp_lines,%temp_ref,$line,@kt,$kt,@Slog,$st_no,$end_no,$i=0,$j=0,@data,$IN_count);
$end_no=$EST{hyouji}*$LC_page -1;
$st_no=$end_no - $EST{hyouji} +1;
open(IN,"$file");
while($line=<IN>){
chomp();
@Slog=split(/<>/,$line);## $Slog[13] = 0_0_0_0, $Slog[2] = URL
@IN_count=(split(/_/,$Slog[13]))[2];
push(@data,{url => $Slog[2], IN_count => $IN_count});
$Clog++;
}
close(IN);
@data = sort{$b -> {IN_count} <=> $a ->{IN_count}} @data;
#foreach $kt(@kt){
#if($LC_kt eq $kt){
#$temp_ref{$Slog[0]}=$i;
#push(@temp_lines,$line);
#$i++;
#}
#$Clog{$kt}++;
#}
close(IN);
0950nobodyさん
2006/05/31(水) 01:44:30ID:8kzUocWY#foreach $line(sort{$b <=> $a}(keys %temp_ref)){
foreach(@data){
if($st_no<=$j && $j<=$end_no){
#push(@log_lines,$temp_lines[$temp_ref{$line}]);
push(@log_lines,$data[$j]});
}
$j++;
#}
#undef(@temp_lines); undef(%temp_ref);
}
お兄ちゃんみたいで頼りにしてます(ο^v^ο)
よろしくお願いしますo(*u_u)o
0951nobodyさん
2006/05/31(水) 01:48:45ID:???0952nobodyさん
2006/05/31(水) 02:05:27ID:8kzUocWYまとめてうpしるって、まとめてアップしろってことですか?
良く分からなくてすみません!(>_<)
レス数が950を超えています。1000を超えると書き込みができなくなります。