【Perl】初心者コーナー Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【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あたりを見よう。
0077nobodyさん
02/11/27 12:22ID:???$tango =~ s/あ/a/g;
$tango =~ s/い/i/g;
ずら〜っとコレじゃダメですか?
でも、「っ」とかって大変そう・・・
後に来る文字で変わるでしょ・・・
0080nobodyさん
02/11/27 17:38ID:37dF+px+って文字コードになってるファイルがあるんですが
コレを元の文字に置換するようなやつはどのように書けばいいんでしょうか?
0081nobodyさん
02/11/27 17:46ID:???0082nobodyさん
02/11/27 19:08ID:???一生独りでシコってろ!!
0083nobodyさん
02/11/27 21:43ID:???ドピュッ
0084nobodyさん
02/11/27 22:06ID:Op374sN2$in = 500; #10進法で入力された数値
for($i = 1;$i < 1297;$i++){
$c[$i] = $h.$j++;
if($j eq "10"){$j = "a";}
elsif($j eq "aa"){$j = "0";
$h++;
if($h eq "10"){$h = "a";}
}
}
$out = $c[$in]; #36進法で出力される数値
効率のいいコードはないでしょうか?
0085nobodyさん
02/11/27 22:42ID:wgGugnNo$after = array('0','1','2','3','4','5'..........'z');
$a = floor($in /36);
$b = $in % 36;
$out = $after[$a].$after[$b];
echo $out;
008685
02/11/27 22:45ID:wgGugnNo$in = 500;
@after = qw(0 1 2 3 ... z);
$a = int($in / 36);
$b = $in % 36;
$out = $atter[$a].$after[$b];
0089nobodyさん
02/11/27 23:01ID:XpHW8B1z$out = (0..9,a..z)[int($in/36)] . (0..9,a..z)[$in%36];
0091nobodyさん
02/11/27 23:17ID:???0092nobodyさん
02/11/27 23:28ID:???0093nobodyさん
02/11/28 00:49ID:???0094nobodyさん
02/11/28 07:22ID:???009574
02/11/28 11:13ID:???今のところ全くの初心者なものでご迷惑をお掛けしました。
とりあえず>>77さんのやり方で出来ました。
「っ」や「ゅ」等については後で考えます。
皆さんありがとうございました。
0096nobodyさん
02/11/28 12:20ID:AB88ovMQどうしたら良いでしょうか?
if( $env(HTTP_REFERER) == NULL)
流石にこれじゃだめっすよね…
0097nobodyさん
02/11/28 12:39ID:???0098nobodyさん
02/11/28 12:40ID:9pvjX8Vyunless( $ENV{HTTP_REFERER} ) {
.
}
0099nobodyさん
02/11/28 12:40ID:FjFqkJQzではだめでつか?
0103nobodyさん
02/11/28 13:17ID:n94VkAjj0104nobodyさん
02/11/28 13:16ID:???>環境変数が存在するか無いかを判定したいのですが
というお題なので、exists でいいんじゃないか?
0や''を検出するなら、まず仕様を決めてもらわんと。
010596
02/11/28 13:22ID:cubtANrCCGIを重複で利用したいので
フォームからアクセスしたときと表示するだけでアクセスした時
に分けたかったんです。
フォームからアクセスした時にはQUERYなりCONTENT?なりに
残るじゃないですか。
それを判別したかったんです。
いろいろ御意見ありがとです。。
0106nobodyさん
02/11/28 13:24ID:???上のCGIが作りたいのですが、どうすればいいですか?
初心者なうえに知識がないんで…
教えてください。
0107nobodyさん
02/11/28 13:41ID:n94VkAjj該当するweb管理者にお問い合わせ下さい。
0108nobodyさん
02/11/28 14:47ID:???業務口調ワラタ
0109nobodyさん
02/11/29 02:18ID:???初心者に掲示板の制作は無理だから諦めれ。
(余談だけど、初心者って掲示板の設置のことを「作り方」って聞くときがあるんだよなー)
0110nobodyさん
02/11/29 11:03ID:YJ7YkLxM文字列を一定の長さまで比較したいんですけど
標準関数ありますか?
Cでいえばstrncmpみたいなものです。
できれば、今後自力で調べる方法も教えて頂けないでしょうか。
0111nobodyさん
02/11/29 12:26ID:???0112nobodyさん
02/11/29 17:54ID:nCXK5uR+メモリ上にロードされっぱなしになって速度が速くなったりするの?
あと、自分のperlソースをpmにすることはできますか?
webで調べたけど情報が無かったです。
0113nobodyさん
02/11/29 18:04ID:???> webで調べたけど情報が無かったです。
http://www.kt.rim.or.jp/~ekbk/perl5.005/perlmod.html
0114nobodyさん
02/11/29 18:08ID:FGwKAXnrprint <<HERE
テスト
HERE;
例(2)
print "テスト";
例(1)と例(2)ではどちらが表示が速いでしょうか?
0115nobodyさん
02/11/29 18:28ID:???●ソース
use Benchmark;
timethese(1000000,{
'ex1'=>sub {
print "テスト\n";
},
'ex2'=>sub {
print << "EOM";
テスト
EOM
}
});
●結果
Benchmark: timing 1000000 iterations of ex1, ex2...
ex1: 40 wallclock secs ( 5.84 usr + 5.25 sys = 11.09 CPU) @ 90203.86/s (n=1000000)
ex2: 49 wallclock secs ( 6.26 usr + 5.56 sys = 11.82 CPU) @ 84631.01/s (n=1000000)
●結論
気にするほどの差はない
0116の
02/11/29 20:42ID:vqpWO9fR> 「DBI.pm」の「pm」って何??モジュール化されてるってこと?
単なるファイル名。use を使ったとき、名前+".pm" で読み込むくらいです。
普通中身はモジュールのための構造を持たせるけど、別に何か規定されてるわけじゃない。
---
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
0117nobodyさん
02/11/29 22:23ID:JObUfqd/0118nobodyさん
02/11/29 22:23ID:lYLiGnC/という文字列があったとして、
例えば3つ目のA以降の文字列を除去するにはどうすればいいでしょうか。
この文字列の場合、
ABCADEA
まで残したいのですが。。。(あるいはABCADEまで
0120nobodyさん
02/11/29 23:00ID:JObUfqd/0121117
02/11/29 23:06ID:JObUfqd/とかすると、
sub error {
の中で、
error:line 333 in hoge.pl
とか出したいんですが。
&errorは、hoge.plからrequireします。
0122nobodyさん
02/11/29 23:13ID:???とかで簡単にコンパイルできたらなぁ
0123nobodyさん
02/11/29 23:13ID:???sub error{
die "error: line $_[0] in $0";
}
0125nobodyさん
02/11/30 00:52ID:???テキスト内のどこにキーワードがあるか一見してわかるような
プログラムを作っているのですが、
jcode::convert(\$_, 'euc', "", "z");
jcode::convert(\$word, 'euc', "", "z");
$_ =~ s/$word/<XX>$word</XX>/; #(XXは任意のタグ)
とするとどうしてもうまく置き換えられずに化けてしまう
文字があります(主に全角のカナ)。
処理は入力をすべてEUCにコンバートしてから行っています。
化けてしまう原因が分かりません。
置き換え時の文字化けというのは避けられないのでしょうか?
0126nobodyさん
02/11/30 00:55ID:???0127nobodyさん
02/11/30 00:58ID:???情報すくなすぎ。
具体的に$_と$word それぞれがどういう入力のときにうまく
いかないのか。jcode::convertした時点で化けているのか、
置き換えたときに化けてしまうのか。
0128125
02/11/30 03:00ID:???jcode::でsjis→EUCコンバート時には
まだ化けていないようです。
さらにそのテキストをsjisに戻した場合は
化けてしまうものもあるようですが、今回は
sjisに戻しておりませんので無視しています。
現状としてはどうやら置き換えている時に
化けてしまっているようです。
どの文字がどのようなタイミングで化けるか調査して
もう一度書き込ませていただきます。
0129125
02/11/30 04:09ID:???確認したところ、置き換え時に同一文字コードながら違う文字?
で置き換えが行われていて化けてしまっているようです。
例えば
$_ = "007シリーズの最新作「ダイ・アナザー・デイ」";
$word = "次';
としたときに以下のようになります
007シリーズの最新作「ダイ・アナザ。<XX>次</XX>Ε妊ぁ廚・
このように、"次"という文字は含まれていないのですが
文字コードが同一?のため中途半端な所で置き換えが
行われて以後の文章が化けてしまう、という現象に見えます。
このような動作を回避することは出来るのでしょうか?
0132nobodyさん
02/11/30 09:03ID:KwMUsAxfうまくいきません。(例:40000000000とか) 何でですか?
$m = 2; $x = 0; $c = 0; ($nは元の数)
while ($h == 0){
if ($n % $m == 0){
$n = $n / $m;
@x[$x] = $m;
$x++;
}
else{
$m++;
if ($n % $m == 0){
$n = $n / $m;
@x[$x] = $m;
$x++;
}
}
if ($n < $m){$h = 1;}
}
0133nobodyさん
02/11/30 09:36ID:???素因数分解のアルゴリズムは置いておいて、
http://pc.2ch.net/test/read.cgi/php/1000191385/66-69
これか?
0134132
02/11/30 10:21ID:KwMUsAxfよく分からないんですが、perlのバージョン?(仕様上?)に問題があるということですかね?
0135nobodyさん
02/11/30 12:00ID:???たとえば<txt></txt>で囲まれている間の文字のみを
s/</</g;
s/>/>/g;
という風に変換したいのですが、
どうしたらいいか分かりません。下記の様にしたのですが、できませんでした。
ご教授して頂けませんか?
if ($val =~ /<txt>(.*?)<(.*[^>]*)>(.*?)<\/(.*?)>(.*?)<\/txt>/) {
$val =~ s/$1<$2>$3<\/$4>$5/ig;
}
#見にくくてスミマセン…
0136135
02/11/30 12:17ID:???上手くいきました、ご迷惑おかけしまスタ
0137nobodyさん
02/11/30 13:59ID:/75slB4UMath::Bigint 使ってください。
Perlで大きい整数はまともに扱えません。
使い方は perldoc Math::Bigint 読んでね。
0138nobodyさん
02/11/30 14:04ID:???ttp://www.din.or.jp/~ohzaki/perl.htm
ここの「日本語を扱う 正しくパターンマッチさせる」を読んでくれ。
日本語処理はそう簡単には実装できない。
0139125
02/12/01 14:00ID:???求めていた回答がここにありました。
じつはそこのサイトはこのスレッドの頭にあったので
見ていたのですが、ちゃんと読まずに通過していたようです。
解決することができました。ありがとうございました。
他の皆様も考えてくださったり回答してくださったりして
ありがとうございました。では。
0140nobodyさん
02/12/01 21:52ID:???で作ったをもとに、
hoge,piyo,huga
と表示させたいです。どうやればいいか教えてください。
0141nobodyさん
02/12/01 21:55ID:???0142nobodyさん
02/12/01 21:58ID:???0143nobodyさん
02/12/01 22:02ID:???0145nobodyさん
02/12/01 22:06ID:???{
my @hogelist = ('hoge','piyo','huga');
my $count =1;
foreach(split(/\t/,join('\t',@hogelist))){
print "," if $count%0x04;
chomp;
print STDOUT;
$count += ($count+1)/0x01;
}
もっと無駄な方法ってないかしらん・・・
0147nobodyさん
02/12/01 22:22ID:SByI0FEM誰かUPローダの作り方教えてください。
作り方を説明してるサイトでもいいんで、お願いします。
0148nobodyさん
02/12/01 22:25ID:???CGI::Liteとかのurl_encode,decodeなんですけども、
ある文字列がエンコード済みなのか未エンコードなのか調べる方法は無いでしょうか?
既にエンコード済みの"300%89%7e%82%c5%8d%a1%8c%8e%90%b6%82%ab%82%c4%82%a2%82%af%82%e9%82%a9%89%b4"
とか、未エンコードの"松屋のカレー(゚д゚)ウマー"とか色々な文字列が与えられてくるのですが
それを一律にURLエンコードがされた状態にしたいのです
で、ソレをデコードする時等、エンコードされてるモノはデコードしなきゃいけませんですし、
エンコードされてないモノに、"今日の降水確率は%25ってとこですかね"とか与えら、
デコードしたら変になってしまいますし…
なにかいい方法はないでしょうか?お知恵をお貸しください…
0149nobodyさん
02/12/01 22:37ID:???レンタルのにしなさい。
>>148
本文につっこみますが日本語がとても難しいです。
もう一度日本語の勉強をしなおしてきます。
($str =~ m#^%.*#)? デコード処理 ;
ではダメ?(やっぱりよくわからん)
0150nobodyさん
02/12/01 22:38ID:???理論的には不可能だ。
'%22'という文字列だけが来たときに、それがもともと
'%22' という文字列をそのまま送信したのか、
'"'(ダブルクォーテーション)を送信したのか、判別できないだろう。
[\x80-\xff]が含まれていたらエンコードされていないと見なす、くらいで
妥協したら?
0151nobodyさん
02/12/02 04:38ID:weXpByrh->decode($str) if $str =~ m/^(?:%[a-fA-F0-9][a-fA-F0-9])+$/;
で、十分実用に耐えると思うが・・・
エンタープライズとかだと、デコードしてないと
error 400になるけど
0152151
02/12/02 04:39ID:???0153nobodyさん
02/12/02 04:41ID:???表示するためには、CGIでどういう記述をすれば良いのか教えて下さい
0154nobodyさん
02/12/02 08:03ID:???ごめんなさい、意図がよく伝わらなかったようで(汗
えと、とりあえず"与えら"は"与えられたら"です、打ちミスりました
>>150
まだまだワカッテナイので、[\x80-\xff]ってのは日本語が入ってたら、ってことなのでしょうかね
あとは"とか&とかそゆモノが入っていた時もエンコされてないなー、って方針でいいのでしょうか
>>151
%xxが含まれてたらエンコード済み、と解釈するということでしょうか?
>>150さんのと組み合わせたほうがより完璧を期することができそうです
下2行はよくわかんないですけど、ある鯖でやると、ってことでしょうか?
>>153
IO::Socketモジュールとか使えばいいような気がします
にちゃんねる掲示板の仕様はよくしらないのですが、どっかにスレ一覧を保持してるファイルが有った気がします
でもアクセスごとに結構な大きさのファイルを取りに行くと転送料問題とかで怒られそうな気もします
初心者なのでなんか重大な勘違いをしてるかもしれませんがネ…
0155150
02/12/02 14:17ID:mB0yHtje150は適当に書いちゃったけど、
[\x00-\x20"#;<>?{}|\\\\^~`\[\]\x7F-\xFF]
が含まれていたらエンコードされていない、と見なすのは?
まあ>>151さんのでOKだと思うけど。
0156nobodyさん
02/12/02 14:53ID:???0158nobodyさん
02/12/02 17:07ID:???キボンと言われましても、他のDBをほとんど使ったことがなく
単純に登録、更新、削除くらいしかしないので感想はあまりないです。
ただちょっとデータ量が多そうなのでDBを使ってみるかとなったのです。
0159nobodyさん
02/12/02 17:55ID:fz9HS+5s上記のサイトを参考にして(というかそのままコピペで)、
WEBページを読み込むCGIを作りました。
しかし、CGIにアクセスしてみたところ正常に読み込めないようです。
$errorMessageは、Can't connect to httpとなっています。
メッセージの意味は分かるのですが、解決策が分かりません。
サーバーの環境は、MacOS10.1.4、Perlのバージョンは5で、自宅サーバーです。
掲示板等のCGIは正常に動いています。
解決策が分かる方、お願いします。
0160nobodyさん
02/12/02 17:56ID:VWSOmEHp>↑オマエは頭の悪いバンドマンだなーどうせオールナイトイベントに出てた
>スキムミルクっていうバンドだろ?ライブ中の態度でけーんだよ。
>ツアーバンドはノルマとらないんだよ。それからいい音出すPAも雇ってチラシも
>すってんだよ。金かかってるんだよ。そのくせてめえら客よばね―のか?
>Y野氏の組織はやばいからねーパソコンオタクもいるから調べられて
>そんな事言ってるとCHOKOに本当にカツアゲされるぞ。
>2ちゃんねるキラー組織って知ってるかなー君?
↓ここでこんな書き込みを見つけたんだが
恐らくお祭り状態になる予想。興味のある方は是非見てきてくだされ。
http://music.2ch.net/test/read.cgi/minor/1031619119/74
ちなみにCHOKOというバンドのサイト。
http://choko3.hp.infoseek.co.jp/
2ちゃんねるキラー組織キタ━━━)゚∀‘)・ω・) ゚Д゚)゚∀゚)・∀・) ̄ー ̄)´_ゝ‘)-_)゚∋゚)´Д`)・∀。)━━━━!!!
0164nobodyさん
02/12/02 18:28ID:+ey3nn6hhost->IPが取得できないのでは
0165159
02/12/02 19:12ID:???レス感謝です。
今日は時間切れの為大学から閉め出されてしまうので、
また明日調べてみようと思います。
ありがとうございました。
0166nobodyさん
02/12/02 19:24ID:???0167nobodyさん
02/12/02 21:16ID:???そのファイル内にある.cgiなどをFFFTPでアップするだけでいいんでしょうか?
0168nobodyさん <sage>
02/12/02 21:21ID:???WebprogとかCGIのスレ行ってよ。Perlとぜんぜん関係ないじゃん。
0169167
02/12/02 22:22ID:???0170nobodyさん
02/12/02 23:00ID:afn6SBSE時間表記をできるように、以下の行を足しています。
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time);
@month =('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@youbi=('Sun','Mon','tue','Wed','Thu','Fri','Sat');
$year += 1900;
if($day < 10){$day = "0$day";}
if($hour < 10){$hour = "0$hour";}
if($min < 10){$min = "0$min";}
$time="$youbi[$wday], $day-$month[$mon]-$year, $hour:$min";
ここで質問なのですが、時間・日を、2時1分が、2:1とならないように、
ifで02:01となるように書きました。
でもこれ、置換処理か何かでもっとスマートに書ける気がするのですが、
具体的にわかりません。どなたか、ご教授願えないでしょうか。
0171nobodyさん
02/12/02 23:06ID:???($day,$hour,$min,$sec) = map {sprintf "%02d", $_} ($day,$hour,$min,$sec);
0172170
02/12/02 23:06ID:???「すぐわかるパール」でした。
古田たかし著の「初めてのCGI&Perl」と混同しました。
今まで読んだ参考書は、上記2冊です。
0173nobodyさん
02/12/02 23:08ID:???@youbi とか、、ダサすぎでしょ。
0175nobodyさん
02/12/03 01:13ID:???if($day < 10){$day = "0$day";}
なんて方法は最悪の部類ですよ。かなりひどい本だと
断定してもいいです。たぶんこれもkent-webのソース
をダサいままぱくってるのかな?
0176nobodyさん
02/12/03 01:18ID:ZhYTYd9Tデータファイルを読み込んで、任意の数字がある場合のみprintしたいと思っています。
for(@log){
if($_ =~ /$num/){
print "$_";
}
}
これでやると、$num=10;とした時、100や101、102....もマッチしてしまいます。
10なら10だけをマッチさせたいのですが可能でしょうか?
0177nobodyさん
02/12/03 01:27ID:???後で必要なのは$timeだけだよね?
($min, $hour, $day, $mon, $year) = (localtime time)[1..5];
$time = sprintf "%s, %02d-%s-%d, $02d:%02d".
qw(Sun Mon Tue Wed Thu Fri Sat)[$wday], $day,
qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[$mon],
$year+1900, $hour, $min;
■ このスレッドは過去ログ倉庫に格納されています