【Perl】初心者コーナー Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/02/09 00:24ID:s0tpWWxg1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
あとは>>2-10。
0666nobodyさん
03/03/08 20:15ID:???$b{} はハッシュの要素を指す
! は論理否定
$_ はデフォルトの対象となる変数
(この場合はgrepによって第二引数=リストの一部が設定される)
++ はオートインクリメント(この場合は後置:式の評価後、インクリメントが発生)
0669名無しのmakoto君(名前あるじゃん
03/03/08 21:23ID:???教えてください<(_ _)><(_ _)>ペコペコ
検索してもよく出てきませんでした(恥
お願いします(たたかれてもメゲマセン←ハァ?
0671nobodyさん
03/03/08 21:49ID:???はいよ〜
http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&as_qdr=all&q=perl+%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%E3%83%BC%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&lr=
0672nobodyさん
03/03/08 21:57ID:???フルパスからファイル名を取得したいので
以下のように作りました。
一応機能的にはokなんですが、もう少し格好良くperlっぽいやり方があれば教えてください。
なんか無駄が多いような・・
$_=$0;
$_=~ s/^(.*)\\(.*)$/\2/;
print "$_\n";
0674名無し.net
03/03/08 22:05ID:HY3rXLfE連想配列(?)についての質問なんですが、
$temp->{'001'} = "1";
$temp->{'002'} = "2";
$temp->{'003'} = "3";
という配列があり、これを通常の連想配列(ハッシュ)で
while (($name, $value) = each(%temp)) {
print "$name = $value<br>\n";
}
とやるのと同じ事をしたいのですが、可能なのでしょうか?
ご存知の方がいらしたら是非教えてくださいm(__)m
%tempを$tempにしたら、500 Internet Server Errorになってしまいました。
0676nobodyさん
03/03/08 22:12ID:???だっけ…、ちと動作させてないから動くかわからん。
0677名無し.net
03/03/08 22:14ID:HY3rXLfEおお。
出来ました。
ありがとうございましたm(__)m
use File::Basename qw(basename);
print basename($0);
>>674
普通にハッシュを使うのではいけないのかな?
$temp{'001'} = '1';
# ...
まぁ、普通にデリファレンスすればいいんだけどさ。
while(my($name, $value) = each %$temp){
# ...
}
でも、サーバーで実験するのはやめたほうがいいよ。
ローカルマシンにperlを入れなさい。
0680nobodyさん
03/03/08 22:25ID:???CGIとして実行するとエラーは全部500になっちゃうから、ちゃんと
エラーメッセージの見られる環境を用意したほうがいいよ。
(コマンドラインで実行させるとか、CGI::Carpモジュールを使うとか)
0681nobodyさん
03/03/08 22:35ID:???0682名無し.net
03/03/08 22:36ID:HY3rXLfESubroutineを梯子して使っているので変数形式のほうがいいかなぁと思いまして・・・。
っていうか、連想配列でのやり方知らないので(苦笑。
すいません。
一応、perlはインストールしてありますが、アップロードして実行して動くか調べてます(ぉぃ
やっぱサーバーに悪影響ですよね・・・。
0688nobodyさん
03/03/08 23:25ID:???>>681みたいなのはどうせクレクレ厨なんだから、技術的なアドバイスしても
徒労に終わるぞ。
0689687
03/03/08 23:29ID:???0691nobodyさん
03/03/09 00:42ID:???なにこの質問
このスレを舐めてるの?
0692nobodyさん
03/03/09 01:39ID:???reverseで反転すると日本語が化けてしまいます。
1バイト文字、2バイト文字が混在していても上手く反転して表示するには、どうすればいいのでしょうか?
また、改行(<br>)とかあっても正常に改行されて、且つ文字化けしない・・・。
よろしくお願いします。
技術的に難しいですか?
0693nobodyさん
03/03/09 01:39ID:???0695nobodyさん
03/03/09 02:36ID:teyBWd6Etimethese(10000,{
'ex1'=>sub {
print "テスト\n";
},
'ex2'=>sub {
print << "EOM";
テスト
EOM
}
});
をDOSプロンプトで実行すると
テスト
テスト
テスト
テスト
・・・・
テスト
ex2: 0 wallclock secs ( 0.60 usr + 0.00 sys = 0.60 CPU)
となります。
ex1: の結果をex2:のすぐ下にでも表示させたいのですが、
どうすればよいのでしょうか。
この結果(ex1: ex2:)はどこかの変数に入っているんですか?
アホな質問ほんとスミマセン・・・・。
0696nobodyさん
03/03/09 02:42ID:???print &jreverse('一応作ってみた。Shift-JIS限定。<BR>とか改行は考慮してないんでそのへんはうまく修正してちょ。');
sub jreverse {
my $str = shift;
my ($i, $f, @jchar) = (0, 0, () );
foreach (unpack('C*', $str)) {
$jchar[$i] .= chr($_);
if (!$f && (($_ > 0x80 && $_ < 0xa0) || ($_ > 0xdf && $_ < 0xfd))) {
$f++;
} else {
$f = 0;
$i++;
}
}
join("", reverse @jchar);
}
0697nobodyさん
03/03/09 03:26ID:???my $r = timethese( 略 );
foreach(keys %{$r}){
my($sec, $usr, $sys, $cnt) = @{$r->{$_}}[0,1,2,5];
printf "%10s: %2d wallclock secs (%5.2f usr + %5.2f sys = %5.2f CPU) @ %.2f/s (n=%d)\n",
$_, $sec, $usr, $sys, $usr+$sys, $cnt/($usr+$sys), $cnt;
}
0698697
03/03/09 03:33ID:???どんなモジュールでも質問する前にドキュメント読むように。
perldoc モジュール名
で、usr+sys = 0 のとき上のルーチンではエラーになるので
適当に直して使ってください。
0699695
03/03/09 04:53ID:xiqLThI6ありがとうございます。
perldoc も読み、更にその日本語訳もネットで読みましたが
まったくわかりませんでした。
そして usr+sys=0 のとき というのがどんな時なのかも
わかりません。よって直し方もわかりません。逝って来ます。
0700nobodyさん
03/03/09 08:51ID:???# shift-JIS 限定
$s = "こんにちは、世界!";
$s =~ s/([\x81-\x9f\xe0-\xfc])([\x40-\x7e\x80-\xfc])/$2$1/g;
$s = reverse($s);
print $s;
0701700
03/03/09 08:58ID:???<br>は適当に処置をよろ。s/>rb</<br>/g;とか。
0702nobodyさん
03/03/09 09:14ID:???unlink ファイルを削除
rmdir ディレクトリを削除
のディレクトリってのは要するにフォルダのことでしょうか?
今まで同義のような曖昧な解釈でしたので一度ビシっと言ってやってください。
0703nobodyさん
03/03/09 09:25ID:???0704nobodyさん
03/03/09 09:29ID:???0705nobodyさん
03/03/09 09:36ID:???ERROR:長すぎる行があります!って怒られたから、URLをうまく貼れないかもしれん
URLを改行して途中で改行した
http://www.google.com/search?as_q=%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A8%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AE%E9%81%95%E3%81%84
&num=10&hl=ja&ie=UTF-8&oe=UTF-8&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&lr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
0706704
03/03/09 09:37ID:???0707704
03/03/09 09:45ID:???こんな香具師にレスつけるなんて…
ダメボ…。
0708真性704
03/03/09 09:48ID:???暇だね・・
>>705
アリガトウございました。よくわかったようなわからないような。
これからチャント理解できるように詰めていきます。
0709nobodyさん
03/03/09 10:45ID:???また、ourなるものがありますが、皆さんどういう場面で使われるのですか?
0710名無し.net
03/03/09 10:58ID:???※ディレクトリとフォルダの違い
ありません。ローカル側で「フォルダ」と言っているのをサーバ上で「ディレクトリ」と言っているだけです。それだけの違いです。
http://www.ayavv.net/d/beginner_hp/022.htm より
↑こんなこといっているサイトがありますけど(−−
0713nobodyさん
03/03/09 13:10ID:???http://hp-design.net/beginning/lecture/html.08.html
こいつと同じこと言っているな(笑)
0714nobodyさん
03/03/09 15:30ID:???は
print "abc";
print "def";
と同義ですか?それとも
print <<EOM
abc
def
EOMと同義ですか?
鯖負荷を軽減させようとEOM使うのはやめたんですがカンマ区切りだと意味がないような気がしてきたので
書籍を見てもPerlだとメモリーの使い方は書いてなかったりする(欝
0721nobodyさん
03/03/09 16:30ID:???インタプリタやスクリプトなら最適化が難しい分余計に。
他の言語を使えというのはひとつのソリューションだろうが、
このスレの趣旨ではなかろう。
0722nobodyさん
03/03/09 16:49ID:???0723nobodyさん
03/03/09 17:04ID:???深読みしすぎかもしれんが、
<<EOM;
EOM
この記法は「EOM」じゃないからね。
ソース出さずに「EOM云々〜」って質問すると恥かくから気をつけよう。
0725nobodyさん
03/03/09 17:17ID:???これどういう意味なんだ?
0728nobodyさん
03/03/09 17:54ID:???0730nobodyさん
03/03/09 18:06ID:2bzPHLiwprint <<"HTML";
<html>
ほげほげ
</html>
HTML
と書いているのですが、どこかで「HTML」と書くのは"格好悪い"
と書かれていた気がします。。
慣例的にはなんと書けば良いのでしょう?
EOFとかになるんでしょうか?
0732nobodyさん
03/03/09 18:18ID:???( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>731
0734nobodyさん
03/03/09 18:26ID:2bzPHLiw「HTML」格好悪くないですか??
できれば慣例とか知りたいです。
そういう慣例ページみたいのあればうれしいんですが。。
0736nobodyさん
03/03/09 18:41ID:???END_OF_???
EO?
こんなのが多いと思うけどさ。
ラベルと一緒でそれとわかれば何でもいいんじゃないの?
0737nobodyさん
03/03/09 19:27ID:vWAYxQigごもっともです。けど見てみたら同じHTML出力でも
統一されてないようだったのでいったい何の略だ?
と思いまして。。
>>736
なるほど。勉強になりました。EO?をよく見ると思ったら
そういう理由だったのですか。こういうのはEOM、こういう場合は
EOFとか暗黙の常識?みたいのがあると思ってました。
(ある程度はそういうのがあるのでしょうけど)
ありがとうございました。
0738nobodyさん
03/03/09 20:20ID:???日本人なら日本語で。
おわり
# ネタだからね、多分!
0739nobodyさん
03/03/10 00:09ID:???このスレ読むまで意味を考えたこともないことに気付いた。
HTMLはダサくないと思う。
むしろ、そこはHTMLの出力部分であることを明示する意味で、
ソースの可読性に貢献してると思う。
俺も少し考えてみるか……
0740714
03/03/10 01:07ID:???実行速度は確認画面などで時間稼ぎをすればある程度はごまかせますが
機械は誤魔化せないのが辛いです
ちなみに漏れはEOM=End of Messageだと思ってます
EOFは本来ファイルの終わりをさす言葉なので途中で書くことはためわれます
ヒアドキュメントを使うというのは@array=<FH>同様に一気にメモリーを使って実行してしまう書法
対してprint "abc"; print "cde";はwhile()同様にメモリーの消費を抑えて実行する書法だと思っているのですが
だと思っていましたが間違いでしょうか?
0741714
03/03/10 01:11ID:???@array=<FH>;
print @array;
がメモリーの無駄遣い
print <FH> while(<FH>);
ということで、考えてみてください
ついでに695ではありません
0742nobodyさん
03/03/10 02:21ID:???そんな些細な事にいちいちカコイイ!!とかカコワルイ!!とか言ってる方が何か変よ。
0743nobodyさん
03/03/10 02:59ID:???メモリの消費と言うが、ヒアドキュメント程度でperlがシステムから確保する
メモリを使い切るようなコードを書いてるならそっちが問題だろう。
特にサイズを指定しない場合のメモリサイズ知ってるか?
そうそう、答え
>間違いでしょうか?
間違いです。メモリに格納はされません。
>>741
考えるまでもない例えだろ。
0746nobodyさん
03/03/10 08:12ID:???0748nobodyさん
03/03/10 13:37ID:???PerlにはPHPのstaticに相当する関数ってありますか?
それなりにPerlを扱ってきたにもかかわらず、今まで知り得なかったので
もしあったら便利だなーと。
perlfaqにあるね。staticキーワードは無いが、実現は出来る。
perldoc -q static
...
BEGIN { # BEGINが不要なケースもある。が、あったほうが安全
my $counter = 42;
sub prev_counter { return --$counter }
sub next_counter { return $counter++ }
}
...
0751名無し.net
03/03/10 19:23ID:???Perlで半角カタカナを文字化けさせないように利用するにはどうすれば良いでしょうか?
jcode.plを使うと文字化けが発生するのですが・・・。
全角カタカナに直す以外の方法で教えてください
0753名無し.net
03/03/10 19:58ID:???そんなぁ〜(><)
0755名無し.net
03/03/10 21:03ID:???0756T女の竹田
03/03/10 21:22ID:???Shift-JISで通すならjcode.plはいらない。
もちろんEUCでデータを送られたら化ける。
ところで、ページをSJISで表示してるのに、フォームからEUCで送られてくるってこと
あるのかな?前から疑問なんだけど。
0757名無し.net
03/03/10 21:32ID:???出力はJhift-JISにしてますけど、コードやDBはEUCを使ってます。
あと、メールを使うときはjisに変換したり・・・。
なのでjcode.plをどうしても使ってしまいます。
0758nobodyさん
03/03/11 09:23ID:???そのファイルの50行目の値が欲しい時、直接50行目の値を取得することできるんでしょうか。
49回スルーさせるんじゃなくて。
0759名無しさん@Meadow
03/03/11 09:24ID:i+lsKHdVJcode.pmにしれ。
0760nobodyさん
03/03/11 09:33ID:???そもそもネットで半角(ry
>758
固定長ならseekで。可変長なら無理ぽ
0761Fox
03/03/11 10:58ID:eJEHBp/l0763nobodyさん
03/03/11 11:33ID:???ブラウザの実装次第になってしまうのでありうる。
>>757
EUCで半角カナをどう扱うか考えてみましょう。
無理ぽ
>>758
head -50 text.txt | tail -1
0764nobodyさん
03/03/11 11:43ID:???掲示板にはいる前のページとかに
最後に書いた人の名前と時間が表示されてるのがつくりたいです。
ちなみにiモードでやりたいです。
■ このスレッドは過去ログ倉庫に格納されています