07/10/14 18:22:36 9kSbwdFL
>>359
画像付きといってもファイルをたまにアップするだけで
ほとんどの利用はテキストの書き込みと、BBSの読み込みです
会員制サイトなのでアクセスの数は少ないです
サイトの関連ログが飛ぶトラブルがあって原因の一つと思います
まず、なぜこの環境の人がアクセスすると、同時刻に3回CGIが動作して
しまうのか、その原因を知りたいです
BBSのスクリプトでは、@の配列に入れたものをforeachで展開しながら
html表示します、アクセスログはこのプロセスに入れ込んでます
361:nobodyさん
07/10/14 19:25:16
当人じゃないからわからんが、Javascriptで読み込みなおしするような
なんかをしてるんじゃね?
本人に聞いたらいいよ。
362:nobodyさん
07/10/14 19:59:35 RGItsPbe
質問です。
CPANモジュールまとめサイトってないですかね?
いろいろググったけどそれらしきものがなかったので。
363:nobodyさん
07/10/14 20:01:11 RGItsPbe
>>362
追記
日本語モジュール解説 まとめサイトです
364:nobodyさん
07/10/14 20:37:02
perldoc.jp
365:nobodyさん
07/10/14 20:42:54
basic認証が必要な自サイトのアクセスログからある部分だけ抽出して表示させたい
のですがまずcgiでアクセスするにはどうすればいいでしょうか?
366:nobodyさん
07/10/14 20:49:09 RGItsPbe
>>364
そこで全部見れるんだ。
ありがとー
結構数すくないっすね
ありがっつ
367:nobodyさん
07/10/14 22:03:04 5YQaKvWD
ブログのページからソースを取ってきてテキスト部分だけを取り出したいんですが
use LWP::Simple;
$buff = get("URLリンク(www....."));
print $buff;
これでとりあえずソースだけは取ってこれたのですが、テキスト(記事)の部分だけ取り出す方法がわかりません。
よろしくお願いします
368:nobodyさん
07/10/14 22:05:45 RGItsPbe
>>367
正規表現でちょちょいのどんじゃないですかね?
一度調べてみることをおすすめします。
369:nobodyさん
07/10/14 22:15:05 9kSbwdFL
>>361
なるほど
当方MacなのでParallelsのWinに「Sleipnir」入れてみましたが、
プラグインかなにかなんでしょうね
有り難うございました
370:nobodyさん
07/10/15 00:22:13
>>367
最近はこういうのが流行みたいです
Web::Scraper
URLリンク(search.cpan.org)
371:nobodyさん
07/10/15 00:43:20
>>369
ぐぐればトップに出てくるだろうに
372:nobodyさん
07/10/15 00:44:21
ごめん、371は勘違い
373:nobodyさん
07/10/15 01:06:24
nikonikoにもScraperネタある。
URLリンク(www.nicovideo.jp)
374:nobodyさん
07/10/15 03:46:48
Web::Scraper が重いんだけど、どうにかならないの?
375:nobodyさん
07/10/15 05:35:56
不満は作者に直接言う
改善案を出す
パッチ送る
376:nobodyさん
07/10/15 12:15:17
男は黙って正規表現一択
scrAPIは女の様な軟弱者が使う物
377:nobodyさん
07/10/15 14:20:07
youtubeに上げなおしてくれ。
ニコニコ垢なんかもってないし使いたくも無い。
378:nobodyさん
07/10/15 21:15:14
カレンダーを作りたいと思っているんですが、ライブラリはありませんか?
379:nobodyさん
07/10/15 22:05:51
>>378
URLリンク(search.cpan.org)
380:nobodyさん
07/10/15 23:41:31
処理の進捗状況を表示する一番よい方法は何ですか?
一定期間ごとにファイルに書き込むことしか思い付きません。
381:nobodyさん
07/10/15 23:43:46
>>380
それでいいんじゃねーの
一番簡単だし
382:nobodyさん
07/10/16 06:05:03
$| = 1;
って何かいいことあるの?
383:nobodyさん
07/10/16 08:47:04
意味をわかった上で言ってるのか?
それとも意味を聞いてるのか?
とりあえず「perl コマンドバッファリング」あたりでググれ。
384:nobodyさん
07/10/16 10:56:39
自分が使ってるサーバーがLWPが使えないようなので、socketで別サーバーのファイル内容を拾って展開させようとしたんですが、
ローカルではちゃんと動くのにサーバーにアップすると凍ってしまいます。
リストにある複数のブログのrss取得して最新のブログ3件の記事表示、みたいなのがやりたいんですが、
サーバーがLWPの許可してないと難しいですか?
なにかいいやり方あったらお教えください。
385:nobodyさん
07/10/16 11:11:22
fpingの出力値の数字だけを抜き出すプログラムを作りたいのですが、うまくできません。
input.txtという名前に下のようなfpingの出力を入れ
www.yahoo.co.jp:[0], 84 bytes, 18.1 ms (18.1 avg, 0% loss)
www.yahoo.co.jp:[1], 84 bytes, 23.2 ms (20.7 avg, 0% loss)
18.1
23.2と出力したいです。
bytes,より前を切り取り、ms ( も切り取ろうとして
$fping = "./input.txt";
open(A,"$fping")|| die "Can not open file";
@b = <A>;
close (A);
foreach $c(@b){
$c = grep(/(.*?)bytes, (\d{1,4}\.\d{1,2} ms) \(/,$c);
}
foreach $c(@b){
print "$c\n";
}
というプログラムを作ったんですが、うまくいきません。
どこを直せばいいでしょうか?
386:nobodyさん
07/10/16 11:26:03
>>385
$c =~ /bytes, (.*?) ms/;
$c = $1;
じゃだめなん?
387:385
07/10/16 12:33:21
>>386
レス遅れてすいません。
できました!
ありがとうございます!!
助かりました、ホントありがとうございます!!!
388:nobodyさん
07/10/16 12:40:52
>>385
出遅れた…。
perl -lne "print /(?<=bytes, )(.+?)(?= ms)/" input.txt
389:nobodyさん
07/10/16 13:22:24
>>384
どこの鯖使ってるか知らんが、LWP使えないようにしてるってことは
FWでoutboundが遮断されてる可能性が高く、だとすればどうしようもない
390:nobodyさん
07/10/17 00:29:17 7VxwUF8E
SNSサイトにperlを使って接続って無理?
391:nobodyさん
07/10/17 00:37:06
日本語でOK
392:nobodyさん
07/10/17 01:05:09
>>390
WWW::Mixi
WWW::Myspace
393:nobodyさん
07/10/17 08:03:38 BedUMdjt
おはようございます。
下のような流れのcgiで
複数のクライアントから接続された場合
変数$gHogeはクライアント毎に保たれますか?
それとも上書きされちゃいますか?
my $gHoge = ""; #クライアントからポストされた値が入る。
~$gHogeを扱う長めの処理が続く。
394:nobodyさん
07/10/17 08:36:36
>>393
実行される度にプロセスが作られるから上書きなんてされない
395:393
07/10/17 09:01:24
>>394
そうですか。期待通りの結果でよかったです。
朝早くからありがとうございました。
396:nobodyさん
07/10/17 23:05:49 7VxwUF8E
>>392???
わからないので要望スレに逝ってきますorz
397:nobodyさん
07/10/18 00:34:50
>>396
ググることもできないのか
398:nobodyさん
07/10/18 01:48:20
モジュールがわからなくてSNSに接続しようとは・・・
399:バターズ
07/10/18 22:40:14
コロンが二つならんでいるのは
ダブルコロンって言うんだよ
400:nobodyさん
07/10/20 00:37:33 Ja84SJeF
Location ではtargetが指定できませんが、呼び出したときの
属性は生きるってどこかに書いてありました
どういうことでしょう
ssiのhtmlファイルの中に書いた、iframeのCGIまたは#exec cgiで
クッキー認証できなかったら全画面を再認証画面に飛ばしたいのですが、
やはり無理でしょうか?
401:nobodyさん
07/10/20 05:18:19 VLTga6QI
print <<EOM;
<a href="hoge.html">hoge</a>
EOM
と、
print "<a href=\"hoge.html\">hoge</a>\n";
ではどちらの方が実行速度が速いですか?
402:nobodyさん
07/10/20 06:50:46
>>401
ほぼ同じ。
URLリンク(boobar.hp.infoseek.co.jp)
403:nobodyさん
07/10/20 07:40:43 VLTga6QI
>>402さん、ありがとうございます。
大変参考になりました。
404:nobodyさん
07/10/20 07:47:37 x+Q9ulv4
おはようございます。
以下のスクリプトについて質問です。
outフォルダ内の.txtファイル全てに対して
ある作業をするというスクリプトなんですが、
ファイルオープンのところでそんなファイルはないから
開けないというエラーが出力されます。
例:hoge.txtがある場合
OPEN ./out/hoge.txt file: No such file or directory at check line 22.
どこが間違ってるか教えてください。お願いします。
OSはWindowsXPです。
my @directories_to_search = ('./out/'); #対象のフォルダ
find(\&wanted, @directories_to_search);
sub wanted{
my $filePath = $File::Find::name;
my $find = index( $filePath, ".txt" ); #.txtを対象
unless ($find >= 0) {
return 1;
}
open FH_READ, "<$filePath"
or die "OPEN $filePath file: $!";
#ある作業をする。
close FH_READ;
}
405:nobodyさん
07/10/20 08:21:11
>>404
22行目ってホントにopen文の所か?
406:404
07/10/20 08:33:09
>>405
え?open文のor dieのエラーメッセージが出力されているから
open文でエラーが発生していると思うんですが・・・
407:nobodyさん
07/10/20 10:42:05
読んで字の如しとしか。
まさかmod_perlじゃないよな?
408:nobodyさん
07/10/20 10:55:56
>>404
openに渡すのは「$filePath」じゃなくて「$_」
File::Findの解説ちゃんと読め
409:半角全角が混在する行が一定の文字数を超えたら折り返すようにしたい
07/10/20 14:21:49 g/E6yd0f
メールフォームを作っています。同マシン上のsendmailを使って送るものです。
送信するメールの本文において、半角全角が混在する行の文字数を数え、
一定の文字数(例えば半角72文字、全角36文字)を超えた行だけを
強制的に折り返したいと考えています。
どのようにするのがよいでしょうか?
lengthはバイト数を返す関数なので、
全角文字の真ん中で折り返されると困ることになると考えてます。
もしかすると、長い行はsendmail側が自動で折り返してくれたりするのでしょうか?
それとも、何かほかの関数で簡単に数えたりできるのでしょうか?
なお、カスタマイズの自由度を考えて自作しているので、
「どこそこのメールフォームを使え」というのは勘弁してください。
以上、よろしくお願いします。
410:nobodyさん
07/10/20 14:28:07 o1wAy6B9
eval ($hoge); の実行した値を変数に入れるにはどうしたらいいでしょうか?
$@ だと、evalでのエラーの値が入る
でも、実行値は...?
お願いします。
411:nobodyさん
07/10/20 14:37:23
>>410
$result = eval($hoge);
じゃダメなん?($resultに実行結果、$@にエラーメッセージ)
参考
URLリンク(www.tohoho-web.com)
412:nobodyさん
07/10/20 14:55:48 o1wAy6B9
>>411 その通り!ありがとう。
短い$hogeだと関数が成功した1しか返さないことがあるようでアレ違うわと思っていました。
>>409
ちょっと離れるので投げっぱなしになってしまいそうだけど
解答してくれる人が現れる間に考えていました
use utf8;
use Encode;
$str = '
eval ($hoge); の実行した値を変数に入れるにはどうしたらいいでしょうか?
$@ だと、evalでのエラーの値が入る
でも、実行値は...?
お願いします。
';
@stream = split(/\n/,$str); #最初に渡された文字列を 改行 を区切りとして @stream に配列として読み込んだ
map{ s{(.......)}{$1\n}g } @stream; #”8文字”単位で改行を入れてる
map{print encode(sjis,$_)}@stream; #各行を出力するときにsjisに変換してる
とか、なかんじでどうよ?
ただし1バイト文字の扱いがなんか変。
*たぶんutf8でけつまずいてるかんじ。
413:nobodyさん
07/10/20 16:08:12
>>409
jcode.plかJcode.pmにjfoldってなかったっけ?
414:409
07/10/20 17:45:16
>>413
これです。こういう機能がほしかったんです。
jcode.plにはありませんでしたが、Jcode.pmにはありました。
これまで使っていたのがjcode.plだったのでが、
MIMEヘッダの機能も強化されているようなので、Jcode.pmに乗り換えようと思います。
どうもありがとうございました。
415:nobodyさん
07/10/20 18:24:36
いいかげんにEncode使い方覚えろよ
416:nobodyさん
07/10/20 19:12:39
>>415
じゃ、Encode.pmを使って折り返す方法を書いてあげれば?
417:nobodyさん
07/10/20 19:44:36
Encode::decodeしてlengthでカウントしてみろよ
418:nobodyさん
07/10/20 20:12:44
文字コードわかってんなら正規表現で簡単にできることだろ
419:nobodyさん
07/10/23 05:26:38
全部正規表現でやるのは重そうだな。
420:nobodyさん
07/10/23 14:21:34
正規表現で解決するならEncode要らんがな。
421:nobodyさん
07/10/23 15:27:18
Perlのテキスト処理で質問させてください。
UTF8な日本語テキストの半角カナを全角にしたいと思ってEncode::JP::H2Zを使おうと思いました。
しかし、一部の文字(~など)がEUCに変換する段階で?に変換されてしまい、困ってしまいました。
とりあえず、コードポイントにフォールバックできることがわかったので、
以下のように書いてその場をしのぎましたが、コードポイントを検索して文字に置換するという
作業が入ってしまい(しかも無駄に複雑)、どうもしっくりきません。
もっと簡単にする方法はありますか?
$text = encode("eucjp", $text, Encode::FB_PERLQQ); # EUCに変換
Encode::JP::H2Z::h2z(\$text); # 全角変換
$text = decode("eucjp", $text);
$text =~ s/\\x\{([0-9A-Fa-f]+)\}/pack("U*", hex($1))/eg; # コードポイントを文字に
422:nobodyさん
07/10/23 17:42:25
>>421
#!/usr/local/bin/perl -w
use strict;
use Encode qw(from_to);
use Encode::JP::H2Z;
my $text = 'このファイルはUTF-8で~半角カナ混じりの文字列';
from_to($text, utf8 => 'cp932');
from_to($text, shiftjis => 'euc-jp');
Encode::JP::H2Z::h2z(\$text);
print $text;
__END__
別解。
use Unicode::Japanese qw(unijp);
print unijp($text)->h2zKana->euc;
423:421
07/10/23 20:32:44
>>422
ありがとうございます。その変換法で化けなくなりました。
後学のためお聞きしますが、Encodeではutf8を直接EUCにマップできないのでしょうか。
SJISを経由するのはわかるのですが、cp932をshiftjisに読み替えるなど、
トリッキーなことをやっていますね。
機種依存文字(①など)がある場合もそうですが、utf8とEUCの変換法は
どうもよくわからないです。
機種依存文字とか、どうやってEUCに変換するんでしょうか
424:nobodyさん
07/10/23 22:43:56
「よくわからない」のは、EUC-JPとCP51932の関係じゃないのかな。
URLリンク(search.cpan.org)
425:nobodyさん
07/10/24 01:04:04
暗号化関連の質問です
メールフォームを使っててブラウザとサーバの間はSSLで暗号化してます
でもサーバからsendmailで送信するメールも暗号化してないと意味ないですよね?
Perlでどうやってやってます?S/MIMEかPGPが使えるの?(´・ω・`)
426:nobodyさん
07/10/24 01:05:27
そもそもメールを飛ばさないという選択肢を検討すべきではないか
427:421
07/10/24 02:01:47
>>424
なるほど、ぐぐってみてわかりました。
EncodeーEUCJPMSでcp51932も使えるようになるんですね。
標準のEncodeになんで実装しないんだろ、これ。
428:nobodyさん
07/10/24 06:10:09
>>425
URLリンク(search.cpan.org)
URLリンク(search.cpan.org)
求められる安全度、対象ユーザのITリテラシ、かけられるコスト
等を検討すると、暗号化メールの使えるシチュエーションは
かなり限られてそうだ。金融機関やNSPだと大抵郵送だな。
429:nobodyさん
07/10/25 16:41:10
スペースは or に変換するが、クォートにかこまれたスペースは変換しない。
これの実装がうまくいきません。
例えば
tenis ball は tenis or ball に変換するけど
'tenis ball' はそのままっていうのはなんとか出来たんですが、
'tenis ball' 'base ball' のときは
'tenis ball' or 'base ball' にするのがどうしても出来ません。
orを入れたい場所もクォートに囲まれてると判断されてしまうのです。
どなたか助けてください。
430:nobodyさん
07/10/25 17:03:22
>>429
my @list = (
q{tenis ball},
q{'tenis ball'},
q{'tenis ball' 'base ball'},
) ;
for my $line ( @list ){
print join ' or ',
map{ /'/ ? $_ : split /\s+/, $_ }
split /\s+(?=')/, $line ;
print qq{\n} ;
}
431:nobodyさん
07/10/26 05:03:54
foreach(@list){
my @token = m/('[\w\s]*'|\w+)(?:\s+|$)/g;
print join (' or ', @token), "\n";
}
432:429
07/10/26 15:02:18
>>430
すみません、できるだけワードは固定してない方がいいのですが・・・うまく動きませんでした。
>>431
おぉ、なんかうまく動きそうです。
でも、クォートの部分を除外して配列に納めたいのですが、どうしたらいいのでしょうか?
433:nobodyさん
07/10/26 23:17:20
>>432
430は全角文字(スペースも含め)を半角に変換してもダメか?
それと「クォートの部分を除外」って意味が分らん。単に
クォートを削除したいだけなら、そのぐらいは自力で考えてみたら?
434:nobodyさん
07/10/27 10:01:02
Encode::JP::H2Z
ってなんでeucjpの糞使用なの?
ユニコードのまま渡せて処理出来ればいいのに。
435:nobodyさん
07/10/27 11:34:06
>434
そういうことはdankogaiに直接文句つけて来い
436:nobodyさん
07/10/27 13:36:03
>434
じゃあお前さんがそういうの作れば?
437:nobodyさん
07/10/27 16:43:19
>>434
Jcode::H2Z (Jcode.pm のサブモジュール) そのままだから。
438:nobodyさん
07/10/27 18:53:28
utf8もページからフォームを入力して送信させると、
「~」の文字だけがなぜか正常に送信されないのですが、なぜでしょうか?
439:nobodyさん
07/10/27 22:19:08 jIrqvOa/
return +{};
という記述の意味を教えて下さい
空ハッシュを返すという事でしょうか?
440:nobodyさん
07/10/27 22:50:14
>>438
何を以て「正常に送信されない」と判断したのか。
URLリンク(ja.wikipedia.org)
URLリンク(euc.jp)
URLリンク(www.asahi-net.or.jp)
>>439
URLリンク(perldoc.jp)
> 単項演算子の "+" は、たとえ文字列に対して用いられた場合にも、
> 何もしません。関数名に続けて括弧付きの式を書く場合に、関数の
> 引数リストと解釈されないようにするために用いることができます。
441:nobodyさん
07/10/27 23:21:31 jIrqvOa/
>>440
ありがとうございます、単項演算子についてはわかったのですが
とあるCPANモジュールのコードで
return +{} unless $data;
というコードがあったのですがこれを
return {} unless $data;
と書かずに単項演算子の+をつけるのは
何か意図があるのでしょうか
戻り値自体はどちらでも同じような気がするのですが、、
442:nobodyさん
07/10/28 00:49:00
ブロックとして解釈される場合があるんじゃね
443:nobodyさん
07/10/28 04:52:46
+{ } :無名ハッシュでコンパイル
{; } :コードブロックでコンパイル
444:nobodyさん
07/10/28 08:38:20
URLリンク(www.nicovideo.jp)
Perlで予約語プログラミング
445:nobodyさん
07/10/28 08:48:47
URLリンク(www.nicovideo.jp)
Perl Programming: Web::Scraperモジュールの利用
↑これ何やってるの?
446:nobodyさん
07/10/28 08:54:29
URLリンク(www.nicovideo.jp)
Perl Catalyst Programming (入門編)
↑これも何をやっているのか、
さっぱりわからんよ
447:nobodyさん
07/10/28 09:22:22
まぁプログラミングを動画で見てもわからんよなw
448:nobodyさん
07/10/28 09:30:40
そうか?
この動画だけは「何をやろうとしてるか」だけは伝わるぞ
URLリンク(www.youtube.com)
449:nobodyさん
07/10/28 11:24:36
>>448
Aho da...orz
450:nobodyさん
07/10/29 02:42:49
>>446 にある動画はなんかおかしいと思う。
451:nobodyさん
07/10/29 11:17:19
質問させてください。
指定した文字が何回続いたかを取得したいのですがどうしたらいいですか?
例)この場合指定した文字は1です。
$a = '1111222';
$b = '1111136';
$aは4
$bは5
よろしくお願いします。
452:nobodyさん
07/10/29 11:56:14
$a='1111222';$i='1';($r)=($a=~m/($i{2,})/);print length $r
全角はシラネ
453:nobodyさん
07/10/29 11:59:30
$a = '1111222';
$c= 1;
$n= length(($a=~/((?:\Q$c\E)+)/)[0])/length($c);
454:nobodyさん
07/10/29 12:31:05
perlは色んなやり方があって面白いね
$a = '111111222';
$n = '1';
$count = length(($a =~ /($n+)/)[0]);
455:nobodyさん
07/10/29 13:04:18
>>451
$test_str = '111234111111';
$char = '1';
こういう場合は後半気にせず、まず見つけた連続の 3 でいいの?それとも、より長い連続の 6?
「はい、6 が得られるようにしたいんです」だと上に回答を書いた皆さんが優しくキレるかも。
あと、例なんだろうけど $a や $b は地雷踏むことがあるから気をつけてね。
456:nobodyさん
07/10/29 13:25:31
use strict;
use warnings;
test('1111222' => 1 );
test('1111222' => 2 );
test('111122211' => 1 );
test('111122211' => 1 , 1);
test('1111136' => 1 );
sub test {printf "%s:%s:%s\n",$_[0],$_[1],_test(@_)}
sub _test {
local($a,$b);
(sort {$b<=>$a} map {length($_)} ($_[0] =~ m{($_[1]+)}g) )[ $_[2] ? -1 : 0 ];
}
457:nobodyさん
07/10/29 17:04:12
my $i = '1' ;
print +( length ) . qq{\n} for split /[^$i]+/ ,$a ;
458:456
07/10/29 19:24:03
見直したらgdgdだったので修正しとく
sub _test { ( sort map length,$_[0] =~ /(${_[1]}{2,})/g )[$_[2] ? 0 : -1] }
459:nobodyさん
07/10/30 23:38:44
一つのファイルで処理がたくさん書いてあって分岐させる時に、
例えば
$mode = $cgi->param('mode');
というデータを受け取って、処理の場合わけをする場合どういう書き方がエレガントなんでしょうか?
現状は
if ($mode eq 'post') { &post}
elsif ($mode eq 'edit') { &edit;}
elsif ($mode eq 'delete') { &delete}
else { &error}
こんな感じなのですが、それは初心者の書き方だって馬鹿にされました。
悔しいのでもっと効率的な方法があったら教えてください。
460:JAPU ◆lVJAPUTeX.
07/10/30 23:52:20
>>459
エレガントかは分からないけど、分岐がある程度多い場合はこんな書き方だとすっきり書けるかと。
%actions = (post => \&post,
edit => \&edit,
delete => \&delete);
if(exists $actions{$mode}) {
$actions{$mode}->();
} else {
error();
}
数個程度なら if で分岐されちゃってもいいと思いますし、実際そうしています。
461:nobodyさん
07/10/30 23:58:03
>>459
それでいいんじゃね?
各サブルーチンに戻り値があるなら「三項演算子」って手もあるし、
以下の様なやり方もあるけど、普通に書いてメンテ出来るものならば
バカにされても放置しとけば?
my %hash = (
post => sub { 1 } , # &post の内容を書く
edit => sub { 2 }, # &edit の内容
delete => sub { 3 }, # &delete の内容
) ;
print $hash{'edit'}->() || q{error} ; #q{error} には&error あたりを、、、
ソース全体を見たら綺麗な書き方があるかもしれんが、
それに関しては情報不足。
462:nobodyさん
07/10/30 23:59:04
ああ、丸かぶりだorz...
463:nobodyさん
07/10/31 00:10:35
せめて、CGI::Applicationくらい使っとけって話なんじゃ。
if文分岐も分かりやすいと思うが、へたに小細工するとますますへたっぴに見える。
464:nobodyさん
07/10/31 12:11:23
三項演算子ってタマに見かけるけど読みづらいんだよな。
使いたくない書き方No1かも。
465:nobodyさん
07/10/31 13:29:29
$expr1 ? $expr2
: $expr3 ? $expr4
: $expr5 ? $expr6
: $expr7
;
書き方か頭が悪いんだろ
466:至急
07/10/31 15:17:23
CGIを自宅出張でサポートしてくれる方募集します。
CGIに詳しく都内に来れる方であれば可能
一日日払い即金で払います。
詳細はメール下さい。
467:nobodyさん
07/10/31 15:47:41
>>459
エレガントかしらないけどこんなパッケージ作ってる。
(不要箇所削ったのでそのまま動くか不明)
package Local::Base;
use strict;
use warnings;
our $DEBUG = 0;
sub class {ref$_[0]||$_[0]||__PACKAGE__}
sub new {(bless {} => class( shift() ))->init(@_)}
sub mode :method {shift->param('mode',@_)}
sub method_name :method {shift->{method_name}->{ shift() }}
sub default_method :method {die('不正なmodeを受け取りました')}
sub init :method {
my $self = shift;
my %param = @_;
$self->{method_name} = $param{method_name} || {};
return $self->run_method( $self->mode , @_ );
}
sub run_method :method {
my $self = shift;
my $method = $self->method_name( shift );
$method = 'default_method' unless $method && $self->can( $method );
return $self->$method(@_);
}
1;
468:nobodyさん
07/10/31 17:36:51
>>467
外部からinitとか呼ばれちゃわない?
469:nobodyさん
07/10/31 19:51:49
>>467 method_nameチェックしてるから大丈夫
使い方も書いたつもりだったんだけど書けてなかった。
#!/usr/bin/perl
use strict;
use warnings;
use base qw(Local::Base);
my $r = eval{
__PACKAGE__->new(
method_name => {
edit => 'edit',
post => 'post'
}
)
} || $@;
print CGI->header,$r,"\n" unless ref $r;
######################################################################
# editの動作を定義
sub edit :method {
my $self = shift;
print $self->header;
print "EDITモード";
return $self;
}
1;
470:nobodyさん
07/10/31 20:11:48
sub edit :method {
この :method って何の意味だっけ
perlsub見ても載ってないや
変数にも付けれた気がしたが
471:nobodyさん
07/10/31 21:09:19
perlsub に載ってるし、perldoc attributesすれば詳細分る(perl5.8.1)。
perl attributes でググれば日本語のサイトも沢山出る。
変数に付けられるのは 5.8系
472:nobodyさん
07/11/01 01:06:18
実際、CGI::Applicationとか使うと効率的になるの?
自分でゴチャゴチャ作るよりも。使ってる人いる?
473:nobodyさん
07/11/01 02:26:10
CGI.pmで書くには複雑だけど、Catalystとかのフレームワーク持ち出すまでもないときには使える
474:nobodyさん
07/11/01 10:48:57
> CGI.pmで書くには複雑だけど、Catalystとかのフレームワーク持ち出すまでもないときには使える
CGI::Application もフレームワークじゃないの?
475:nobodyさん
07/11/01 17:27:41
>>470
:methodは組み込みのattribute
Attribute::Handlers使うと自作のattributeも作れる。
…がいつ仕様が定まってなくて変更があるかもってどっかで読んだ気がする。
>>474
・自分しかいじらない
・少人数で知識の共有が容易
・マニュアルが整っている
のどれかなら自作のフレームワークの方が慣れてるだろうし開発効率いいんじゃないかな?
フレームワーク自体のメンテナンスが(出来る|しなきゃいけない)のはデメリットか?
既製のフレームワーク使うのは
・他の人と知識の共有しやすい
・ドキュメントがある/(第3者も使ってるので)ノウハウが検索しやすい
・フレームワーク自身のメンテナンスを(あまり)しなくていい
ってとこかな?
476:nobodyさん
07/11/01 18:07:59
>>475
???
477:nobodyさん
07/11/02 11:22:36
/public_html/test/log.txt を、UTF8→SJISに変換して、
別名で保存するにはどうすればいいでしょうか
Perl 5.8.8なのでuse Encode;を利用する、読み取り専用で1行ずつ変換処理する
あたりまでは勉強しました。スマートな方法よろしく御教示おねがいします
478:nobodyさん
07/11/02 13:22:56
ログをShift_JISに変換ではなく、表示する時にsjisに返還して表示するようにして、
データはutf-8のままのほうがよくないかな。
479:nobodyさん
07/11/02 13:29:46
>>477
まずは自分で書いた糞コード晒すのが先じゃね?
480:nobodyさん
07/11/02 14:01:12
>>477
おまえさんの「スマート」の基準が判らんのだが、
Encodeで何か不足でもあったのか?
481:nobodyさん
07/11/02 16:43:20
nkf -s log.txt > log.sjis.txt
482:nobodyさん
07/11/02 17:17:33
>>481
すげー!、シェルスクリプトですよね?
sshができない場合はこんな感じで利用すればいいのかな
system("nkf -s log.txt > log.sjis.txt");
1つ気になるのがjcode.plなど元の文字コードを指定するのがあると思うのですが、
&jcode::convert(\$_, 'sjis' ,'utf8');
nkfでは気にしなくても自動判別完璧なのでしょうか?
483:nobodyさん
07/11/02 17:34:58
もはやPerlに何の関係もない
484:nobodyさん
07/11/02 17:51:47
>>477
use Perl6::Slurp;
use Jcode;
$c = slurp "log.txt";
Jcode::convert(\$c, "sjis", "utf8");
open($fh, ">", "log.sjis.txt");
print $fh $c;
>>482
jcode, Jcode, nkfは、判別できる場合は判別してくれる。
485:nobodyさん
07/11/02 22:18:35
>>484
頭足りてないのは理解した。
486:nobodyさん
07/11/05 07:24:22
gethostbynameについての質問です。
コマンドプロンプトだとnslookup -> set type=***
UNIXならhost -t ***
でクエリタイプを設定できるんですけど、PERLの場合はどうやるのでしょうか。
487:nobodyさん
07/11/05 10:55:44
>>486
URLリンク(search.cpan.org)
488:nobodyさん
07/11/05 11:20:15 6nXAnQ+n
ファイルのオープンでエラーになります。
open(FILE,">".$workFname) or die "Cannot Output File: ";
あらかじめファイルを持たせておいて、書き込み権限を与えておけば
成功しますが、新規にファイルを作成できません。
どうすればいいのでしょうか。
489:nobodyさん
07/11/05 12:21:09
ディレクトリのパーミッションかな
490:nobodyさん
07/11/05 13:05:21
>>489
解決しました、ありがとうございます。
491:nobodyさん
07/11/05 13:19:35
die するときに $! も含めるべき。
492:nobodyさん
07/11/05 13:22:45
自分の環境では、相対パスではエラーになるので、絶対パスに書き換えてます。
できれば相対パスのままで動くようにしたいです。どうすれば解決できるか分かる
方はおられませんか。まあ、あまり解決策が複雑なら、とりあえずあきらめてこの
ままにしておくつもりですが。
493:nobodyさん
07/11/05 14:36:06
>>492
まず「何を」相対パスにしようとしているのかくらい書こうぜ。
あと「自分の環境」は書かなきゃ誰にも伝わらない。
494:nobodyさん
07/11/07 09:25:24 R3XG8Srf
Perlで関数の引数に二次元配列を渡すのは無理ですか。
495:nobodyさん
07/11/07 09:32:37
>>494
ヒント:リファレンス
496:nobodyさん
07/11/07 11:46:06 R3XG8Srf
次のソースのsub kansuのforeachの行は何と書けば正しく動きますか
#!perl/bin/perl
use strict;
sub kansu{
my $ref1 = shift;
my $value1;
foreach $value1($$ref1) {
print $value1 . "\n";
}
}
sub main{
my @databox1 = (13,1,6,3,9,8);
my $ref1 = \@databox1;
usort_kansu(@databox1);
}
main();
497:nobodyさん
07/11/07 11:47:42
誤: usort_kansu(@databox1);
正: kansu(@databox1);
498:nobodyさん
07/11/07 12:36:16
>>496
「言語的意味で」正しく挙動させるには
foreach $value1($ref1) {
(多分)あなたの望んだ挙動にするには
ソースの殆どに手を入れる必要がある。
∴ 本読んでからどうしても分らんかったら
質問し直せ
499:nobodyさん
07/11/07 14:24:36
>>496-498
#!perl/bin/perl -w
use strict;
sub kansu {
my $ref1 = shift;
# my $value1;
foreach my $value1 (@$ref1) {
print $value1 . "\n";
}
}
sub main {
my @databox1 = (13,1,6,3,9,8);
my $ref1 = \@databox1;
kansu($ref1);
}
main();
500:nobodyさん
07/11/07 15:22:14 vLJSXT0R
コーディングじゃないのですが該当スレが見当たらず、新規スレにするような質問でもないと思いこちらに質問します。
.qmailからperlスクリプトを呼び出しているのですが、その場合エラーログを取るにはどうしたらよいのでしょうか?
不正終了しているようなのですが、原因がつかめません。
501:nobodyさん
07/11/07 15:43:21
eval { require スクリプト; };
if ($@) {
open(LOG, ">>/path/to/ログファイル名") or die;
print LOG "WARNING: $@";
close(LOG);
}
こういうスクリプトをqmailから呼び出せばどーよ
>499
forearch行を書き換える条件だからforearch my $value (@_){ って書いて欲しかったのかと・・
502:501
07/11/07 15:59:10
foreach $value1($ref1,@_) {
こうか
503:500
07/11/07 16:13:30
>>501
ありがとうございます。
試してみます
504:nobodyさん
07/11/07 18:20:14
STDERRに吐いた文字はqmailのログにのこるでしょ?
ログが見えないならプログラムを置くべきではないと思う。
505:nobodyさん
07/11/07 18:46:18
>>504に同意だけど、
とりあえず、STDERRをファイルにでもリダイレクトすればどうなん?
506:500
07/11/07 19:59:45
>>504
qmailのログとはmaillogでしょうか?
スクリプトからは何もログを吐いていないんです。
sudoでapache権限で実行してるからログ吐かないのかな。
507:nobodyさん
07/11/07 20:05:11
|/path/to/script.pl >> /path/to/error.log 2>&1
508:500
07/11/07 20:13:46
>>507
ありがとうございます。
.qmailでもログ指定しないといけないんですね。
509:nobodyさん
07/11/07 21:32:38
>>500
何かとんでもない設定でqmail動かして無いか?
510:500
07/11/07 22:29:30
>>509
いえ。
.qmail内でperlのみsudoしてapache権限で動かしてます。
qmailはvpopmail権限で動かしてますよ。
>>507さんでログ取れました。m(__)m
511:nobodyさん
07/11/09 15:33:58
UTF-8でperlを書きたいのですが、文字コードをperlにどのように知らせればよいのでしょうか?
512:nobodyさん
07/11/09 15:47:46
>>511
plagger のソース読むといいよ!
513:nobodyさん
07/11/09 17:28:52
>>512
それ無理に流行らそうとしなくていいよ
514:nobodyさん
07/11/09 17:49:37
tokuhirom自重
515:nobodyさん
07/11/09 18:08:33
Perl死んじゃうん?
516:nobodyさん
07/11/09 18:57:53
(・∀・)ニヤニヤ
517:JAPU ◆lVJAPUTeX.
07/11/09 18:59:46
>>511
use utf8;
518:nobodyさん
07/11/09 19:09:09 8S2oyKnm
>511
use dan;
で解決するよ。
519:nobodyさん
07/11/09 19:26:50
tokuhirom の直近の発言をコピペすることによりスレを荒らす tokuhacks.
520:nobodyさん
07/11/09 21:31:54
plaggerのソース読めって言ってるやつのほとんどはplaggerのソースが読めない
521:nobodyさん
07/11/09 22:28:46
コード解説読めってならともかくコード読ませたってしょうがないだろ。Perlなんだから
522:nobodyさん
07/11/09 23:35:40 8S2oyKnm
tokuhiromのソース読めって言ってるやつのほとんどはtokuhiromのソースが読めない
523:nobodyさん
07/11/09 23:39:07
プラガー(笑)
524:nobodyさん
07/11/10 10:49:28 Z9OcedPC
web上の圧縮ファイル(.lzh)をダウンロードして保存、
さらにその圧縮ファイルを解凍するスクリプトを作りたいです。
例えば、LWP::Simpleを使った場合
my $dat = get('URLリンク(hoge.com)');
の後はどう処理していけばいいでしょうか?
525:nobodyさん
07/11/10 11:02:39
> の後はどう処理していけばいいでしょうか?
lha 書庫を解凍する処理を行えばよい。
526:nobodyさん
07/11/10 11:03:28
>>524
はい。
URLリンク(www.google.co.jp)
527:nobodyさん
07/11/11 02:16:45
2chみたいに携帯から固有のIDを作りたいんですが
どうすればいいんでしょうか。
528:nobodyさん
07/11/11 07:14:50
>>527
i-mode:UTN
EZweb:HTTP_X_UP_SUBNO
Y!:UA
529:nobodyさん
07/11/11 14:32:10 4iiY3aOI
正規表現について質問です。
urlからファイル名だけを取り出したいです。
例えば、$urlという変数に下の3つのurlがあった場合は
hoge1.html, hoge2.html, hoge3.htmlを取り出したいです。
URLリンク(localhost)
URLリンク(localhost)
URLリンク(localhost)
下のように自分でやってみたのですが、localhostの前の/から取得してしまいます。
if( $url =~ /\/(.*\.html)$/ ){
print $1 . "\n";
}
どうすればやりたい事ができますか?
教えてください、お願いします。
530:nobodyさん
07/11/11 14:35:11
ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。
あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?
531:529
07/11/11 14:47:19
>>530
レス有難うございます。
>ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。
なるほど。でも頭では理解できてもそれをコーディングするとなると・・・
.*の部分を弄ればいいのかなぁ。
>あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?
はい、このパターンは今回ありえないっす。
532:529
07/11/11 14:58:10
条件文を下のコーディングに変更したらできました。
if( $url =~ /\/([^\/]*\.lzh)$/ ){
正規表現すげー
>>530さんアドバイスありがとうございました。
533:nobodyさん
07/11/12 08:03:25
.*?も覚えたらいいとおも
534:nobodyさん
07/11/12 16:33:29 XNEEDQVz
そのファイルがバイナリなのかテキスト(shift-jis,euc,utf8)なのかを判断するにはどのようにしたら良いのでしょうか?
最初、linuxの fileコマンドを使用していたのですが誤認識がよくあり使えません。
バイナリなのかテキストなのかだけ分かればいいのですがperlでそれを行うにはどのようにしたら良いのでしょうか?
535:nobodyさん
07/11/12 16:42:39
ファイルテスト演算子
536:nobodyさん
07/11/12 18:17:28 XNEEDQVz
>>535
有難う御座います。
試してみましたが、EUCだったり10文字程度のcp932などの場合に誤認識するようです。
537:nobodyさん
07/11/12 18:33:52
\0が含まれてればバイナリでいいんでないの
それ以外だと各文字コードの仕様を調べて
全データがそれに矛盾してないか判断するしかないと思
538:nobodyさん
07/11/12 18:39:12
正規表現使えばいいじゃない
539:nobody
07/11/13 03:52:36 fKqfq45H
URLリンク(www.jpopfan.co.jp)
上のサイトのようなゲームをperlで作りたいと思っています。
htmlのみでも十分なゲームだとは思いますが、あえてCGIゲームとして作りたいです。
(学校の授業の自由課題であるので・・・)
一応以下のようにhtmlは作ってみました。
<html>
省略
<body>
<h1>オーケストラ楽器別診断</h1>
<p>次の質問にお答えください♪</p>
<form action="/nussknac/cgi-bin/kadai.cgi" method="post">
<dl><dt>お名前</dt>
<dd><input type="text" name="name" value=""></dd><br>
<dt>Q1. あなたはプライドが高いほうですか?</dt>
<dd><ul>
<li><input type="radio" name="answer1" value="Yes" checked>Yes</li>
<li><input type="radio" name="answer1" value="No">No</li>
</ul></dd></dl>
<p><input type="submit" name="send1" value="送信"><br></p>
</form></body></html>
540:nobody
07/11/13 03:57:04 fKqfq45H
539の続きです。
HTMLのフォームから情報をCGIに送り、最初の質問に対してYesならAの質問、NoならBの質問・・・というように
答えによって質問を分岐させるように作りたいです。
if文でひたすら分岐するというイメージはありますが、どうすれば、送信ボタンを押した時に次の質問ページにリンクさせる事ができるかが分かりません。
質問ページは一つ一つ作りたいです。
よろしくお願いします。
541:nobodyさん
07/11/13 04:18:50
そういうアルゴリズムも含めて課題になってるんじゃねーのか・・・まぁいいけどさ。
で、htmlはともかくどこまでperl書いたのよ。まさか1行も書かずに相談しにきてるわけじゃあるまい?
542:nobodyさん
07/11/13 06:54:14
何日か前に別のスレでも見たけど、ここで聞いてて課題間に合うの?
543:nobodyさん
07/11/13 08:58:39
あみだくじでいいのか、選択によってポイントがたまってその結果で振り分けられるのか。
色々ロジックはあると思うけど、そこら辺はどうするのかな
544:nobodyさん
07/11/13 09:17:32
>542
提出日まで1~2週間とかなら大丈夫じゃない?
その昔、C言語の授業があって、その授業終了直後に提出したら怒られたことがあったなあ(笑)
ごめん、確かに授業聞いてませんでした。
545:nobodyさん
07/11/13 09:19:51
あみだくじでいいなら、
<li><input type="radio" name="answer" value="Aの質問のURL" checked>Yes</li>
<li><input type="radio" name="answer" value="Bの質問のURL">No</li>
ってして、
print "Location: answerの値\n\n";
でリダイレクトさせていけばいいだけでは?
546:nobodyさん
07/11/13 10:36:02
HTMLでおk
547:nobodyさん
07/11/13 11:10:10
リンク元のURLに%??%??~が含まれてる場合に、その文字をデコードしてUTF-8として表示しようとしています。
元の文字コードがUTF-8のときは問題なく表示できるのですが、
文字コードの判別を含めてやる場合どうやったらいいのでしょうか?
Perlのバージョンは5ですが、プロバイダ(@nifty)のサーバーのため標準モジュールを使用できません。
いきなり変換が難しいならUTF-8か否かを判別できれば、
UTF-8の場合→直デコード
UTF-8でない場合→直デコード→jcode.plで変換
でいいのかもと考えているのですが、UTF-8か否かの判別法がわかりません。
よろしくお願いします。
548:nobodyさん
07/11/13 15:19:48 lcS1D/Cp
539です。
一応perlでは以下のように作りました。
#!/usr/local/bin/perl
use CGI;
$query = new CGI;
$q1 = $query->param('answer1');
if ($q1 eq Yes) {
open(F, ">>q2.html");
} else {
open(F, ">>q3.html");
}
でもこれだとエラーが出てしまいます。
どのように直せばいいでしょうか。
リンクのさせ方など教えて下さい。
課題提出は12月までです。
違うスレには書いていないので私ではないです。
549:nobodyさん
07/11/13 15:34:47
use constant Yes => 'Yes';
550:nobodyさん
07/11/13 15:56:31
課題は自分でやれwww
551:nobodyさん
07/11/13 16:29:42
>>54
こんな感じはどうよ。適当に書いたからちゃんと動くかどうか知らんけど。
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use FileHandle;
use File::Spec;
my $cgi = CGI->new;
my $fh = FileHandle->new;
my $html_dir = '/path/to/html/dir';
my $output = $cgi->header( -type => 'text/html' );
my $fn = q{};
if ( $cgi->param('answer1') eq 'Yes' ) {
$fn = 'q2.html';
}
else {
$fn = 'q3.html';
}
$fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<');
my $data = do { local $/; <$fh> };
$fh->close;
$output .= $data;
print $output;
552:nobodyさん
07/11/13 16:30:23
レス番ミスった。
誤 >>54
正 >>548
553:nobodyさん
07/11/13 16:31:27
さらに訂正。
誤 $fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<');
正 $fh->open( File::Spec->catfile( $html_dir, $fn ) '<');
554:nobodyさん
07/11/17 14:33:33 GlJQ98hk
URLリンク(oshiete.new-akiba.com)
ここを見ながらコマンドプロンプトを操作しているのですが
ダウンロードされる段階まで行っても
Can't locate strict.pm in @INC (@INC contents: .) at C:\Program Files \warrick\warrick.pl line8.
BEGIN failed--compilairion aborted at C:\Program Files \warrick\warrick.pl line8.
と出ます。
意味もそもそも分からないのですが、解決方法教えてください
555:nobodyさん
07/11/17 15:24:40
>>554
エラーの原因は@INCが空になってるから。なんでそうなってるのかは知らん。
ActivePerlを入れ直してみたら?
あとここはコーディングスレだからスレ違いだと思わなくもない。
556:nobodyさん
07/11/17 20:14:46
>>555
最新版入れてみたけど同じでした
質問スレいってきます
557:nobodyさん
07/11/17 20:58:37
>>にアンカを3つだけつけたいんだけど、これだと同じとこにリンクをかけてしまいます。
どうすればいいんでしょうか。
for($i=0;$i<3;$i++)
{
$str=~s/>>[0-9]{0,10}[-]{0,1}[0-9]{0,10}/<a href="$_[1]p=$&">$&<\/a>/;
$str=~s/p=>>/p=/;
}
558:nobodyさん
07/11/17 22:00:49
$i = 0; $buf =~ s/(>>\d+)/$i++ < 3 ? "LINK:$+" : $+/egs;
559:556
07/11/17 22:23:56
>>558
ありがとうございます。
そんな書き方知りませんでした。
560:557
07/11/17 22:26:54
>>559
556じゃなくて557でした
561:nobodyさん
07/11/18 19:50:49
自作モジュールをロードするときに、BEGINブロックで@INCに追加してからBEGINの外でuseするのは外道
562:561
07/11/18 19:51:25
↑
「ですか?」が抜けた。
すまぬ
563:nobodyさん
07/11/18 20:25:36
>>561-562
外道かどうか知らんが、普通は use lib でしょ。
564:nobodyさん
07/11/19 06:13:08 s0DcKkZM
これからプログラムをやりたいと思ってます。
いまからやるならperlは覚えたほうがいいですか?
565:nobodyさん
07/11/19 06:19:02
PHPでいいよ
566:561
07/11/19 08:54:57
>>563
ありがt
567:nobodyさん
07/11/20 11:38:30 PLctc9ni
多重起動の禁止はできたが、解放がうまくいかない。
どこが悪いか教えてください。
#登録&多重起動禁止
use Win32::API;
use Win32::Mutex;
my $mutex = Win32::API->new("kernel32","CreateMutex",["N", "N", "P"], "N");
die "二重起動" if(Win32::Mutex->open('TestProgram123'));
$mutex=Win32::Mutex->new(1, 'TestProgram123');
#解放
my $releacemutex = Win32::API->new("kernel32","ReleaseMutex",["N"], "N");
$releacemutex->call($mutex);
568:576
07/11/20 14:43:38 PLctc9ni
自己解決
Win32-API使わなくてもできるのねぇ
569:nobodyさん
07/11/21 03:27:48
むしろ何の為のラッパーだよ
570:nobodyさん
07/11/23 21:52:32 BH2PwYj+
質問失礼します。
AとBの文字があるとき、文字列の中のBAを全てABにしたいときはどのような置換をすればいいのでしょうか?
例えば、
$s = "AABABABBBA";
と文字列があったら、
$s = "AAAAABBBBB";
にしたいのです。
$s =~ s/BA/AB/g;とすると、置換後を判定してくれないので、困ってます……
571:nobodyさん
07/11/23 21:58:25
>>570
たとえば。
$ perl -e '$s = "AABABABBBA";while($s=~s/BA/AB/g){}print $s;'
572:nobodyさん
07/11/23 22:00:18
>>570
その場合、これ以上置換できなくなるまで「$s =~ s/BA/AB/g;」の処理を行わなければならない。すなわち、ループである。
s/BA/AB/g;は、置換を行った回数を返す。つまり、0を返すまで処理を継続したいのだから、while文が使える。
したがって、次のようになる。
while($s =~ s/BA/AB/g;){}
whileのあとの{}の中に何も入っていないが、これでお望みどおり動くようである。
573: ◆TWARamEjuA
07/11/23 22:31:04 BE:6970188-2BP(6825)
sortって云う手もあるよなぁ♪
print join "", sort split "", "AABBABABBBABAABBAABABABABA";
574:570
07/11/23 22:36:47
>>571-573
返信ありがとうございます。
無事whileを使う方法で出来ました。
575:nobodyさん
07/11/24 07:56:01
>>574
遅レス。
他の文字が存在しないと云う条件下なら、素直に文字数カウントするって手もある
perl -le 'my $s = "atataaattttatatat" ; print "a" x ( $s =~ s/a/a/g ) . "t" x ( $s =~ s/t/t/g ) ;'
ま、他の文字が存在してても外側ループ一個つけるだけだけどね。
蛇足だと思ったんだが、、、、
576:nobodyさん
07/11/25 15:53:28
ちょっと分からないので質問させてもらいます。
手作りで掲示板みたいなのを作ってるんですけど
Location:で二重投稿を禁止したくて書いたんですが投稿したあとにLocation:って文字が表示されて飛ばないんですけど
なんでしょうか?
普通なら飛ぶのに飛びません・・・。
誰か分かる方が居れば教えてください。
577:nobodyさん
07/11/25 16:07:12
>>576
content-typeの前に書いてみ
578:nobodyさん
07/11/25 16:35:27
>>577
出来ました。
ですが書き込みがされなくなりました・・・。
579:nobodyさん
07/11/25 17:55:01
そもそもがどんな仕組み何だかわかんねーと答えようがねーよw
こっちはエスパーじゃないんだからさw
580:nobodyさん
07/11/25 18:30:55
>>579
URLリンク(www.uploda.org)
これなんですが上手く動作しなくて・・・。
581:nobodyさん
07/11/25 18:47:07
一番最初に
print "Content-type: text/html\n\n"; # データ形式
を書いてるのが不味いような気がするのは気のせいかな。
582:nobodyさん
07/11/25 18:47:57
>>581
他のところに置いたりすると上手く動作しないんです・・・。
583:nobodyさん
07/11/25 18:50:17
あと、$locationって変数、どこで使ってるんだろ。
584:nobodyさん
07/11/25 18:55:24
勉強し直しておいで。
585:nobodyさん
07/11/25 18:55:39
あ、それは書き忘れましたがKENTWEBさんのところのをちょっと借りたやつです。
# リロード
if ($location) {
if ($ENV{'PERLXS'} eq "PerlIS") {
print "HTTP/1.0 302 Temporary Redirection\r\n";
print "Content-type: text/html\n";
}
print "Location: $location?\n\n";
exit;
}
これがサブルーチンのwriteの最後に置いてました。
586:nobodyさん
07/11/25 18:56:09
とりあえずヒントは、
・Location: はHTTPヘッダに出力する
・ヘッダとボディの区切りは空行で示す
587:nobodyさん
07/11/25 19:08:15
前も書いたけど、kentwebのってデリミタに<>使うの好きだねえ。データがでかくなってくると、
2バイトも勿体無いと思う。
588:nobodyさん
07/11/25 19:10:08
>586
難しそうですが頑張ってみます。
589:nobodyさん
07/11/25 21:12:48
2バイトさえ気になるような人はデミリタに何使うんだろ。
590:nobodyさん
07/11/25 21:13:37
デリミタねw
591:nobodyさん
07/11/25 21:51:10
タブ?
592:nobodyさん
07/11/25 21:57:24
俺はタブ。excelにも貼るだけで、データやりとりできるし。
593:nobodyさん
07/11/26 01:21:50
俺は適当に,にしてた
594:nobodyさん
07/11/26 09:34:29
>>593
CGIでHTMLを吐く前提なら、 , を入力されると面倒なことになるんだよな。
< > なら < > ってできてしまうからいいんだけど。
595:nobodyさん
07/11/26 09:35:03
↑失礼
< > なら < > ってできてしまうからいいんだけど。
596:nobodyさん
07/11/26 17:00:07
, は,でいいんじゃね?俺もタブ使うけど
597:nobodyさん
07/11/26 19:49:54
ちょいと質問を。
今ソフトバンククリエイティブのCGI/perl ハンドブック第3版
のCGIサンプルで掲示板を作ったのですが掲示板にメッセージが書き込まれなかったらエラーを出そうと
思って四苦八苦しているんですがperl6はよく分からなく苦戦しています。
誰かこの本を持っていて、分かる方がいればご教授お願いします。
598:nobodyさん
07/11/26 20:23:48
>>597
その本持ってないから知らないけど、本当にperl6ですか?
#このスレはご教授ってOKなんだっけ?
599:nobodyさん
07/11/26 21:19:36
こんばんは。
LWPで、現在取得しているURLの情報を参照する方法ってあるでしょうか。
URLリンク(www.xxx.ne.jp)<)
こんな感じのURLになってるのですが、この ? 以降の情報を取得したいのです。
$responoser->base
では、 ? より前のURLしか返してくれません。
教えてください。
600:nobodyさん
07/11/26 23:26:29
>>598
その使い方も間違ってない以上、突っ込む方が野暮or空気が読めないでおk
601:nobodyさん
07/11/27 03:23:29
質問します
他のサーバー上のテキストファイルを読み込ませたいのですがopen関数ではできないんでしょうか?
602:nobodyさん
07/11/27 03:33:26
できない
603:nobodyさん
07/11/27 03:49:49
>>601
あんたすげーな
604:nobodyさん
07/11/27 06:16:45
童貞で40歳まで行ったら妖精になれるよりすごい発想
605:nobodyさん
07/11/27 07:36:33
ただ、PHPでは同じような方法でできるこの不思議。
606:nobodyさん
07/11/27 08:12:36
だれか599についての回答を・・・
607:nobodyさん
07/11/27 09:01:18
>>599=606
リダイレクトされるためには適切なHTTPヘッダが返っているはずだからそれ調べる。
608:nobodyさん
07/11/27 11:02:47
>>599 >>606
うちの環境では、3回リダイレクトを経て、?&引数がもっさりついたurlに飛ばしても、
print $response->base();
で、引数(’?’以降%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8Aとか)がついた
URLを表示できたけど・・・。
ActivePerl 5.8.8-build822(XPsp2)
LWP/5.808
609:nobodyさん
07/11/28 05:14:00
ブログの自動投稿プログラムを作りたいと思ってるんですが、大まかな仕組みも分からず困っています。
どなたかご教授願えませんか?
ちなみに、用途はバーチャルな人間の日記を作りたいと思っています。
日記を出力するアルゴリズムは別に用意しますので、
それをブログの投稿画面に自動でログインして書き込むようにしたいのです。
ローカルからでも構わないのですが、
できれば安いレンタルサーバーから行えれば良いなと思ってます。
検索で『自動投稿』としたらたくさん見つかったのですが、どれもアフィリエイター用のもので、
結構値段も高いですし、記事を予め用意しないとダメなので私がしたいようには出来そうにありません。
610:609
07/11/28 05:16:24 onMmaiK+
よろしくお願い申し上げます。m(__)m
611:nobodyさん
07/11/28 05:24:30
ひょっとしたら、atom っていうのを勉強したら道が開けるんですか?
612:nobodyさん
07/11/28 05:26:27
日記を出力するアルゴリズム ←これがきになる
613:nobodyさん
07/11/28 09:39:10
日記を出力するアルゴリズム ←ってのはもしかして勝手に日記を書いてくれるプログラムだろうか
614:nobodyさん
07/11/28 09:48:03
>>609
△▲ WebProg 初心者の質問 Part16 ▼▽
スレリンク(php板)
615:nobodyさん
07/11/28 13:29:43
日記を出力するアルゴリズムを書ける人ならそれぐらい自分でできそうだけど。
荒らしスクリプトにするつもりじゃないなら、その日記を出力するアルゴリズムの
元ネタの場所を公開すれば信用が得られるかも。
616:nobodyさん
07/11/29 03:01:28
そういうのは荒らしやスパムに使われる可能性が高いから、自分でやりな。
617:609
07/11/29 18:18:55 fn44RAXr
>>612-615
日記のアルゴリズムが完成したわけではありません
ただそっちは、大したものじゃないにしても何とかなりそうなんです。
一方、自動投稿の方は何から手を付けていいのかすら分からない状態でしたので質問させてもらいました
>>616
やっぱりそうですか
わかりました。何とか頑張ってみます
因みにスパム行為をするつもりは毛頭ありませんが、確かに見ようによってはそう映る可能性も否定できないですね。
あくまでも普通の人間っぽい挙動にしたいと思っているので、投稿の数も一日で多くて3通程度、少ないときは三日ぐらい更新しないような動きを考えてました。
とにかく自分で何とかしないとダメみたいですね
ご迷惑おかけ致しました
618:nobodyさん
07/11/29 18:50:54
URLリンク(search.cpan.org)
619:nobodyさん
07/11/29 18:56:46
>>617
う~む、どう考えてもやっぱりその
日記を出力するアルゴリズム
ってのが、自動投稿するスクリプトより遥かに高レベルのような気がするが・・・・。
まあいいや、ヒントだけ。
WWW::Mechanize オススメ。
内容や使い方は、自分で調べてちょ。
620:609
07/11/30 00:45:15
>>618,619
ありがとうございました。
参考にさせていただきます。
今いろいろ資料を調べたり、さっき図書館で借りてきた
Webクライアントプログラミングって言う本(めちゃふるいですがw)
を読んだりしてます。
HTTP通信などは一度もやったことがないので、
LWPあたりから勉強したほうがよさそうな、
そんな気がしてる今日この頃。
AtomとかXML-RPCとかの資料にまではたどり着けたのですが、
そこに平然と書かれている GETだのPOSTだのという表現についていけない状況です。
あれを全部 perl のコードに解釈するための知識がないのです。
というわけで、だいぶ時間掛かりそうですが、
こつこつやっていこうかなと。
もう少し進歩して、またわからないことがあったら、
ここか>>614さんが教えてくれたスレにでも出没いたします。
では、ごきげんよう皆様。
621:609
07/11/30 03:34:24
(´・ω・`) ノシ やっとこさ、livedoor から餌を頂戴できました
なんだか、嬉しくて涙が出てきた 。・+゜(つД`)゜+・。
みんなありがと
622:609
07/11/30 03:51:57
>>619 Mechanize というのを完全に誤解してたようです
XML-RPCとかAtomPubなどとはまったく違うんですね。
なんというか、禁断の・・・いや、貴重な情報ありがとうございました。
623:nobodyさん
07/11/30 12:46:37
フォームメールに入力された内容を半角→全角に変換するプログラムがわかりません。
$str = '$mystr';
$kigou ='@!"#$%&\'()=-^\\|{}:;+*?_/<>';
require 'jcode.pl';
if ($FORM{'namae'} ne ''){
$mystr = $FORM{'namae'};
&hankaku;
}
sub hankaku{
&Jcode'convert(*str,'euc');
if($str =~ /^[0-9]{7,11}$/){
&jcode'tr(*str,'0-9A-Za-z','0-9A-Za-z');
}elsif ($str =~ /\x8E/) {
&jcode'h2z_euc(*str);
}else ($str =~ /$kigou/){
&jcode'tr(*str,'@!”#$%&’()=-^¥|{}:;+*?_/<>','@!"#$%&\'()=-^\\|{}:;+*?_/<>');
}
&Jcode'convert(*str,'sjis');
$str = $value;
exit 0;
}
1度eucに変換してからと考えたんですが。
624:nobodyさん
07/11/30 13:06:38
>>623
Unicode::Japanese
625:nobodyさん
07/11/30 13:27:37 7wito75u
2007/11/30-2007/12/01,00-24,[動作させる値]
のようなdatファイルを下記でブランチさせると、指定範囲外だと判定されてしまうようなのです。
改善するにはどこを直せば良いでしょうか・・・最後の日付部分の比較だけで判定されてる・・?
localtime(time)取得やDAT読み込みは大丈夫っぽいです。
foreach $sdat(@set){
next, if $sdat eq "\n";
@sdat = split(/,/,$sdat);
@ddat = split(/\-/,$sdat[0]);
@d1dat = split(/\//,$ddat[0]);
@d2dat = split(/\//,$ddat[1]);
@tdat = split(/\-/,$sdat[1]);
if(
($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[0] eq '*' || $d2dat[0] >= $year))
&&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[1] eq '*' || $d2dat[1] >= $mon))
&&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[2] eq '*' || $d2dat[2] >= $mday))
&&($d1dat[0] eq '*' || ($ddat[1] ne '' && $d1dat[0] <= $year) || ($ddat[1] eq '' && $d1dat[0] == $year))
&&($d1dat[1] eq '*' || ($ddat[1] ne '' && $d1dat[1] <= $mon) || ($ddat[1] eq '' && $d1dat[1] == $mon))
&&($d1dat[2] eq '*' || ($ddat[1] ne '' && $d1dat[2] <= $mday) || ($ddat[1] eq '' && $d1dat[2] == $mday))
&&($sdat[1] eq '*' || ($tdat[0] <= $hour && $hour <= $tdat[1]))
){
chomp $sdat;
$url = $sdat[2];
last;
}
}
626:nobodyさん
07/11/30 13:32:25
ひどすぎわろた
627:nobodyさん
07/11/30 15:56:59 7wito75u
失礼。自己解決しました。
628:nobodyさん
07/12/10 07:32:09 aPvXjzqK
Perl5.x+CGIです。
現在、複数のプロセスから、同じデータにアクセス(読み書き)したいと考えています。
異なるプロセス間で共有される静的な変数、というようなイメージです。
外部ファイルやデータベースなどを経由する方法以外で、
このような処理を実現するにはどのようにすればよいか、ご存知の方がいましたらお願いします。
やはりmod_perlが適当でしょうか。
629:nobodyさん
07/12/10 11:08:15
静的な変数?
ていうかそれプロセスが落ちたらデータは消えていいってこと?
素直にファイルなりDBなり使えばいいとおもうんだけど、それができない理由は?
630:nobodyさん
07/12/10 11:47:45
質問の意味がわからないけど
mmapやmemcacheみたいなの?
631:nobodyさん
07/12/10 13:16:59
読み書きするのに静的ってナンダロ
スレッド使うMPM+mod_perlで:shared使うとか
shared memory使うとかそういう話かな?
質問の仕方が初心者臭いし素直にDB使っとけって気がする。
632:628
07/12/10 20:47:52
>629-631
ありがとうございます。遅くなってすみません。
ご想像通り初心者です。初めて触ったのは何年も前ですが、仕事とか全然関係ないので。
Perl ←―→ 外部ファイル、DB
↑
ここのコストが凄く重いので、可能な限りアクセスを減らしたいと考えています。
Perl側で保持しておけば多少は減るかなあと。
要は、「キャッシュ」のようなものだと思っていただければ。
>629
>プロセスが落ちたら
はい、構いません。もう一度、データ本体から取得するだけなので。
>631
>読み書きするのに静的
「静的変数」と「定数」は全くの別物という認識だったのですが、
もしかするとPerlの世界だと違うのかもしれません。少し調べてきます。
>630-631
>mmap、memcache、shared
軽く調べてみただけですが、そういうことです。勘違いしてるかもしれませんが。
この辺のキーワードを参考に、深く見てみようと思います。
633:nobodyさん
07/12/12 13:49:47 uWSb2hJm
すみません質問です。
複数画像ファイルが入っている特定フォルダから更新日が一番最新のファイルを
探して表示させたいのですが出来ますでしょうか?
尚、ファイル形式は不定です。
教えてください。
宜しくお願いします。
634:nobodyさん
07/12/12 13:58:00
(stat 'filename')[9]
635:nobodyさん
07/12/12 16:11:40
質問です。
aaa.htmというファイルを読み込んで、その中に書かれている変数を変数展開したいと思ったのですがそう簡単にはいきませんでした。
print qq|$_|;
とすれば変数展開されるかなと思いましたがそれもだめ。
置換を使えば簡単なのですが、置換以外の方法がありましたら教えてください。
--------aaa.htmの内容--------
<html>
<body>
$a
</body>
</html>
--------ソース--------
$a = 'aaa';
open(IN, "< aaa.htm");
@html = <IN>;
close(IN);
print "Content-type: text/html; charset=Shift_JIS\n\n";
foreach (@html)
{
print $_;
}
636:nobodyさん
07/12/12 16:27:53
HTML::Templateでも使っとけ
637:635
07/12/12 16:52:55
evalをつかったらなんとかなりそうです。
>636さんレスありがとう
638:nobodyさん
07/12/12 17:26:25 BkwLyerT
Encode.pm 5.85でEUC→UTF-8変換時に、
「髙」などの漢字が化けてしまうのですが、
これを化けないように工夫するにはどうすればいいのでしょうか?
639:nobodyさん
07/12/12 18:06:55
>>638
Encode::EUCJPMSを入れて、cp51932を使う。
640:nobodyさん
07/12/13 08:48:25
>>635
s/\$(\w+)/${$1}/g;
641:628=632
07/12/13 20:33:46
自己レスな上に遅レスです。
色々と検討してみた結果、速度や安全性に疑問も多いですが、とりあえずshm○○を使ってみようかなと思います。
ありがとうございました。
642:nobodyさん
07/12/14 03:20:01 jWEjvsMQ
質問です。
Usteramで録画したflvをダウンロードしたくて、
URLリンク(unknownplace.org)を参考に以下のソースを実行しました。
#!/usr/bin/env perl
use strict;
use warnings;
use AMF::Perl;
use LWP::UserAgent;
my $cid = shift || '5Fq8cQp9eHsEEknbQ22OOZniqS2xUiuz';
my $amf = AMF::Perl::Util::Object->new;
$amf->addBody('client.watch_video', '/1', { cid => $cid });
my $outputstream = AMF::Perl::IO::OutputStream->new;
my $serializer = AMF::Perl::IO::Serializer->new($outputstream, 'utf-8');
$serializer->serialize($amf);
my $amfdata = $outputstream->flush;
$amfdata =~ s/\xff\xff\xff\xff/\0\0\0\x31\x0a\0\0\0\x01/;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new( POST => 'URLリンク(gw.ustream.tv)' );
$req->content( $output );
$req->content_type('application/x-amf');
$req->content_length( length $amfdata );
my $res = $ua->request($req);
my $deserializer = AMF::Perl::IO::Deserializer->new(AMF::Perl::IO::InputStream->new($res->content), 'utf-8');
use YAML;
print Dump $deserializer->getObject->getBodyAt(0)->{value};
643:642
07/12/14 03:21:23 jWEjvsMQ
実行結果は以下の通りです。
Content-Length set when there is no content, fixed at /Library/Perl/5.8.6/LWP/Protocol/http.pm line 196.
Can't use an undefined value as a HASH reference at test.pl line 37.
どうすればいいでしょうか。
よろしくお願いします。
644:nobodyさん
07/12/14 08:48:00
37行目って何処よ
645:nobodyさん
07/12/15 20:24:19
$text = <STDIN>;
として、処理中に何らかのテキストを入力させたいです。
英数字は問題ないのですが、日本語を入力したときが変です。
aあ
と入力して、バックスペースを押すとちゃんと消去されません。2回おせば「あ」の表示は消えるのですが、
受け取った文字のaも消えてしまっています。
解決策を教えてください
646:nobodyさん
07/12/15 22:15:15
IPアドレスから携帯のキャリア判定してる人ってみんなここから
新しいIPアドレスが追加されたか定期的にチェックしてるんですか?
URLリンク(ja.wikipedia.org)
647:nobodyさん
07/12/15 22:41:06
ついでにききたいのですが、
@text = <STDIN>;
ってやったときに、入力を終わりにするにはどうすればいいのですか?
648:nobodyさん
07/12/16 02:59:28
>646
そこから調べてるかどうかはともかく、公式サイトを見るのは確かだな。
まあ、IPアドレスが追加されること自体はあんまり無いし……。
649:nobodyさん
07/12/16 11:33:56
>>646
リモートホストに変換して判断してる。
650:nobodyさん
07/12/16 16:00:14
>>649
ホストに変換するのは失敗することあるらしいぞ。
直接IPから判断した方が確実。
気にするほどじゃないとは思うけど、どうなんだろ
651:nobodyさん
07/12/16 18:41:45
perlで2ちゃんねるの専用ブラウザみたいなのって作れるんでしょうか。
652:nobodyさん
07/12/16 19:23:33
ネットワークをサポートしていて、文章の出力が出来るなら大抵の言語で可能だと思うよ。
653:642
07/12/17 11:34:49 FgX+pG+l
>>644
37行目は一番最後のprintの部分です。
654:nobodyさん
07/12/18 10:34:57
たとえば、sample.plに、
require('lib/lib.pl');
&dosomething();
と書いておいて、lib/lib.plに、
sub dosomething{
open(FH, '>> baka.log');
print FH time."\n";
close(FH);
}
とすると、lib/の中にファイルができるのではなく、ひとつ上にできてしまいます。
これをlib/の中に保存したいのですが、ライブラリからの相対パスで保存する方法はないでしょうか。
または絶対パスを使うしかないのでしょうか。
ヒントだけでもお願いします。
655:nobodyさん
07/12/18 11:18:35
>>654
じゃあ、ヒントだけ…
つ %INC
656:654
07/12/18 16:52:48
>>655
ありがとう!
こーゆー用途に使うのな。
657:nobodyさん
07/12/19 01:05:36
ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが
よくわからなくて試行錯誤の末下のような方法にたどり着きました
$AA{'name'} = '1234';
$BB[0]{'name'} = 'abc';
$BB[1]{'name'} = 'ああああ';
$BB[2]{'name'} = '!?';
kansuu( \%AA );
$tmp = \@BB;
kansuu( ${\$tmp->[0]} );
kansuu( ${\$tmp->[1]} );
kansuu( ${\$tmp->[2]} );
sub kansuu
{
my $h = $_[0];
print "$h->{'name'}<br>";
}
BBの要素を kansuu() に入れるために
もっとスマートな方法(っていうか正しい書式)がありましたら教えていただけないでしょうか?
658:nobodyさん
07/12/19 01:14:31
my %AA = ( name => 1234 );
my @BB = (
{name => 'abc'}, #$BB[0]に無名ハッシュ(リファレンス)をいれる
{name => 'ああああ'}, #$BB[1]に〃
{name => '!?'} #$BB[2]に〃
);
kansuu( \%AA ); #\をつけることで%AAのリファレンスがわたる
kansuu( $bb[0] ); #$bb[0]の無名ハッシュリファレンスを渡す
kansuu( $bb[1] );
kansuu( $bb[2] );
sub kansuu {
printf('%s<br>',shift->{name});#ハッシュリファレンスは->をつけて要素を取り出す
}
659:nobodyさん
07/12/19 02:00:39
$,@,%,\と(),{},[]と->の組み合わせで大抵何とかなる。
正直スカラーのリファレンスの説明は自身がないけどおよそあってると思う
my $scalar = 'abc'; #スカラー
my $scalar_ref = \$scalar; #スカラーのリファレンス
my $anon_scalar_ref = \do {my $anon;}; #微妙に無名じゃないけど
my @array = (1,2,3); #配列
my $array_ref = \@array; #配列のリファレンス
my $anon_array_ref = [1,2,3]; #無名配列のリファレンス
my %hash = (a=>1,b=>2,c=>3); #ハッシュ
my $hash_ref = \%hash; #ハッシュのリファレンス
my $anon_hash_ref = {a=>1,b=>2,c=>3}; #無名ハッシュのリファレンス
my $slacar_object = bless $scalar_ref => __PACKAGE__; # スカラー使ったオブジェクト
my $array_object = bless $array_ref => __PACKAGE__; # 配列使ったオブジェクト
my $hash_object = bless $hash_ref => __PACKAGE__; # ハッシュ使ったオブジェクト
#素直に取り出せる
printf "scalar=%s\n",$scalar;
printf "array=%s\n",$array[0];
printf "scalar=%s\n",$hash{a};
#アドレスっぽいのがとれる
printf "scalar_ref=%s\n",$scalar_ref;
printf "array_ref=%s\n",$array_ref;
printf "scalar_ref=%s\n",$hash_ref;
#リファレンス先の値書き換えたり取り出したり
$$scalar_ref = '書き換えちゃった';printf "scalar=%s\n",$$scalar_ref;
$array_ref->[1] = '書き換えちゃった';printf "array=%s\n",$array_ref->[1];
$hash_ref->{b} = '書き換えちゃった';printf "scalar=%s\n",$hash_ref->{b};
#デリファレンスする(copyが作られる)
my $scalar2 = ${$scalar_ref};
my @array2 = @{$array_ref};
my %hash2 = %{$hash_ref};
660:nobodyさん
07/12/19 07:53:49
CGI.pmでmetaを出力したいのですがうまくいきません。
↓これを出力したいのですが・・・
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
URLリンク(www.geocities.co.jp)
このページの解説によると、
use CGI;
my $q = CGI->new;
print $q->start_html(
-head=>meta({'http-equiv' => 'Content-Type'
-content=>"text/html; charset=$CharSet"}
),
このようなコードになるはずなのですが、やってみると
Undefined subroutine &main::meta called
というエラーがでます。meta()がメインのサブルーチンだと解釈されてるみたいです。
661:660 続き
07/12/19 07:54:19
print $q->start_html(
-head=>$q->meta({'http-equiv' => 'Content-Type'
-content=>"text/html; charset=$CharSet"}
),
とやると一応うまくいくのですが、なぜか
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
このようにもう一つ余計なメタが出てしまいます。どうすればいいのでしょうか?
CGI.pmは3..31です。
662:nobodyさん
07/12/19 10:23:45
>>660-661
URLリンク(perldoc.jp)
my $q = CGI->new;
$q->charset('UTF-8');
663:660
07/12/19 23:37:11
>>662
ありがとうございました!
664:657
07/12/20 08:31:41
>>658-659
ありがとうございます!
超わかりやすくて助かりました
今のプログラムの色んなところがもっと簡潔に書けそうです
665:nobodyさん
07/12/20 10:28:40
> 超わかりやすくて助かりました
> 今のプログラムの色んなところがもっと簡潔に書けそうです
本当はわかってないくせに。
666:nobodyさん
07/12/20 13:33:18
>>658-659ですべてが理解できれば天才
667:nobodyさん
07/12/20 13:39:25
最低限は書かれてて分かりやすいとは思ったぞ
668:nobodyさん
07/12/20 16:21:00
読む気もしねぇよ
669:nobodyさん
07/12/21 21:13:42
でもああやって思いつく限りの書き方試して要素やハッシュ値見てればなんとなくでもわかってくるはず。
めんどいけど。
670:nobodyさん
07/12/22 18:50:11
あんな変な列挙を眺めるんじゃなくて、続初めてのPerl読むべきだろ。
671:nobodyさん
08/01/02 06:47:19
perl5.10 に移行した人います?
672:nobodyさん
08/01/02 20:07:21
ノ
依存コードは書いてないけど
673:nobodyさん
08/01/03 00:16:04
ノシ
cygwinで5.10入れてみた
use 5.10;で書いてみてる
674:nobodyさん
08/01/05 22:21:41
変数の中身を展開せずに確認したい場合ってどうすればいいんでしょうか?
$test = "今日は\n いい天気です $wether";
こんな変数があるとして、$test自体は展開してほしいんですが、
中身の\nや$wetherは展開せずに出力したいのです。
675:nobodyさん
08/01/05 22:58:36
'
ちなみに、weather?
676:nobodyさん
08/01/06 03:58:05
>>674
$testに代入した時点で展開しちゃってるでそ
そもそも確認したい意図は何?
リファレンスにしてアドレスを確認する手もあるけど
677:674
08/01/06 14:08:20
うーん、無理みたいですね。諦めます。一応問題は解決しましたので
>>675
そうです;
>>676
なるほど・・・
意図は正規表現でゴチャゴチャいじったあとの文字列が
どうしてもめちゃくちゃくになってしまうので、変数の位置関係を調べたかったのです。
678:nobodyさん
08/01/06 16:36:10
>>674はなぜ>>675の一行目を無視するんだ?
それが答えじゃないか。
>>676はそれもわかってないみたいだが。
679:nobodyさん
08/01/06 23:12:25 wcb81UNa
$kekka = int(200 * 0.29);
print "$kekka";
このような計算をしたら、結果が57になりました。
intって小数点が発生した時に切り落とすはずですよね?
えと、なぜこんなことになるのか意味が分からないのですが、
誰かご教授お願いします
680:nobodyさん
08/01/07 01:59:09
>>679
URLリンク(www.tt.rim.or.jp)
681:nobodyさん
08/01/07 11:17:24
それ、今じゃ間違いじゃないってのが一般的。
語源の知識としてはありだけど、誤用が定着するなんていくらでもあることだから。
いつもいつも空気読めない人が指摘するよな。
682:nobodyさん
08/01/07 11:27:36
>>679
$kekka = int(((my $n=200 * 0.29)=~/(.*)/)[0]);
print "$kekka";
こう書けばOK
683:nobodyさん
08/01/07 11:29:04
>>681
誤用でない方が一般的だとする根拠は?
684:nobodyさん
08/01/07 11:38:36
回答にはなってないけれど、こちらの環境でもいくつか試してみた
ので、その結果を書いておく。
何でこんな風な結果になるのだろうか。私も分からなかった。
$kekka = 200 * 0.29;
print "$kekka";
出力:58
$kekka = 200 * 0.29;
$kekka = int($kekka);
print "$kekka";
出力:57
$kekka = int(200 * 0.29);
print "$kekka";
出力:57
$kekka = int(2 * 29);
print "$kekka";
出力:58
685:nobodyさん
08/01/07 12:30:31
浮動少数の扱いの問題。
use bignum; これで解決。
686:nobodyさん
08/01/07 21:15:48 XSyaqzwg
>>685
おぉ いきました!
詳しい原因はよくわからないですが、ありがとうございました。
687:nobodyさん
08/01/07 21:22:49
ためしにPerlじゃなくてLispで
(* 200 0.29)
ってしてみたら57.99999999999999だってさ。機械の計算って難しいことがあるな
688:nobodyさん
08/01/07 22:41:02
誤差については、がっこで習うものだと思ってたけど、そうでもない?
689:nobodyさん
08/01/07 22:44:33
俺は習ったけど、もしかしたら教えてないところも少なくないかもしれん
690:nobodyさん
08/01/07 23:59:36
情報工学を扱う授業でもなきゃ教わらないんじゃね?
少なくとも俺は浮動小数点の丸め誤差については習ったことない。
あと高校の世界史も。
691:nobodyさん
08/01/08 00:07:25
>>683
>>681じゃないがなんかの辞書に載ってた気がする
ソースはない
692:nobodyさん
08/01/08 00:31:05 k+nta2fc
丸め誤差の知識はありますけど、
コンピュータの中で200*0.29ってどうやって計算してるか分からない
そもそも結果が57.9999・・・・になると言われても、どういう計算をしているのか
さっぱりw
693:nobodyさん
08/01/08 00:34:28
しかも
(* 20 0.29)
これは5.8って表示されるから困るw
694:nobodyさん
08/01/08 00:38:53
自前のショッピングカートの消費税を int($sum * 0.05) みたいに計算してるんだけど、大丈夫だろうか…
695:nobodyさん
08/01/08 07:14:24
>>694
>>685にすれば大丈夫かと
696:nobodyさん
08/01/08 08:15:35
俺は一番最初の質問者ではないが、浮動小数点の丸め誤差については、
wikipediaにも載ってたね。
問題の解決には、 use bignum; つかえばいいわけで、それでいい
のは分かるけれど、それとは別の話で、小数を100倍して整数で演算をして、
あとで100で割ったりする方法だったらちゃんとでるから
use bignum; しなくてもいいんだよね?
697:nobodyさん
08/01/08 22:01:08
>>696
0.29が有効数字2桁だとあらかじめ分かっているなら100倍すればいいけどなあ。
既知でないときにはuse bignum;じゃないか?
698:nobodyさん
08/01/09 00:10:32
>>697
レスサンクス。
いや、意味の無い部分の考えかなと思ったんだけど、
そっちの方がメモリが少なくて済み、処理が早くなったりするのかなとか
思ったのよね。ま、すごく小さな世界をいっているんだろうけれど。
699:nobodyさん
08/01/09 01:01:57
うーん、俺も難しいことはわからんけど、
俺は細かい実行時間を気にしてミスをするより、コードの可読性を優先したいな。と思った。
大量のデータを扱う人から見ればふざけた態度かもしれないけどね。
700:nobodyさん
08/01/09 02:01:45
LL的には人間にとっての最適化(コードの可読性)のほうが重要だからそれでいいと思うな
701:nobodyさん
08/01/09 03:08:01 480klIK2
リーダビリティ重要。(高橋メソッド風に)
702:nobodyさん
08/01/10 23:51:33
IPを10進数に変換したものと、
サブネットマスク形式のリストをマッチングさせたいんですが、
どんなループさせればいいですかね?
#判定ルーチン内
foreach (@list) {
my ($min,$max) = subnetMinMax($_);
return ($ip >= $min and $ip <= $max) ? 1 : 0;
}
としてるんですが、grep等を使ったほうが良いんでしょうか?
ループ内でサブルーチン呼ぶのがちょっと気になります。
703:nobodyさん
08/01/11 00:04:09
訂正orz
x: return ($ip >= $min and $ip <= $max) ? 1 : 0;
o: return 1 if($ip >= $min and $ip <= $max);
704:nobodyさん
08/01/11 11:44:26
@listの中にマッチするものが複数存在する可能性があって
何にマッチしたか全て取りたいならgrepだけど
有るか無いかだけでいいならループ回して見つけ次第結果返していいんじゃない?
705:nobodyさん
08/01/11 16:30:20
return $ip >= $min and $ip <= $max;
706:nobodyさん
08/01/11 20:31:41
>>704
なるほど。このままにしますありがとうございました。
>>705
そっか、そうですよね。
聞いてみて良かったです。
707:nobodyさん
08/01/12 13:10:11
「うんこ」を含む行の最後に「出る」と追加することってできますか?
「うんこ」の前後は英数字・日本語交じりで文字数は不定です。
$_ =~ s/(うんこ)/$1でる/;
だと、うんこ~出るの間の文字が文末にきてしまいます。
文末指定は$みたいなので
$_ =~ s/(うんこ)/$1でる$/;
としてperlを実行させると、エラーなのか、プログラムが終わりません。
708:nobodyさん
08/01/12 13:13:01
if ( $うんこ =~ /うんこ/ ) {
$うんこ .= ’でる’
}
709:nobodyさん
08/01/12 13:38:43
「うんこを含む行」「改行」 ⇒ 「うんこを含む行」「でる」「改行」
if (index($_, 'うんこ') >= 0){ $_=~ s/$/でる/; }
710:707
08/01/12 13:54:47
>>708
全角を半角にしてやってみたりしましたが、エラーでした。
>>709
できました。ありがとうございます。
ただ、>=0の意味が分かりません。
改行は\nじゃないんですか?
711:nobodyさん
08/01/12 18:35:26
なにこのうんこスレ
712:nobodyさん
08/01/12 19:18:44
>>710
index
713:707
08/01/12 22:50:20
>>712
すみません、わかりました。ありがとうございました。
714:nobodyさん
08/01/13 13:16:41 rzzkvCmj
怠惰が美徳だの
エロエロ言語だの
言うけどさ
俺が習ってきた主な4つの言語のなかじゃ
間違いなく一番習得が苦しかった
ぞ
つまり、学習コストは高い
Perlより習得が難しい言語ってあるの?
私見では達人レベルを目指すならC++が全言語のなかで一番習得困難
そこそこのプロレベルを目指すならPerlが一番困難(C++はそこそこのプロならまだ簡単)
715:nobodyさん
08/01/13 13:17:19 rzzkvCmj
スレ間違えた( ゚д゚ )
716:nobodyさん
08/01/13 21:52:12
配布用のスクリプトを書く予定なんですが、
変数名のつけ方で悩んでいます。
たとえば、
my $title;
my $script_content_title;
my $ScriptContentTitle;
sub param{}
sub parse_URL_encoded_string{}
sub ParseURLEncodedString{}
等、色々書き方ありますが
短い方が良いのか、わかりやすい名前が良いのか、
又、大文字、小文字を混ぜて使うべきか、覚えやすい名前にするべきか、
意見ください。
賛否両論あると思いますが、極力万人受けするものを選びたいです。
長文すみません
717:nobodyさん
08/01/13 21:53:50
配布スクリプトの中身の変数名なんて誰も見ねぇよ
718:nobodyさん
08/01/13 21:56:06
>>717
学習、改造用として配布したいんです。
719:nobodyさん
08/01/13 22:43:42
perldoc perlstyle
720:nobodyさん
08/01/13 23:03:26
変数や関数の名前の付け方は、どんなプログラムを書こうとしている
かというところもあるからな。
例えば、関数名で html_ をつけるとそうでないものとの区別がついて
分かりやすくなるけれど、全部の関数に html_ がついてたら
逆に無意味に長いだけとなる。
ここでアドバイスが欲しかったら、その書こうとしているプログラムや
ソースをもう少し具体的にだすとかしないと話は進まないと思う。
721:716
08/01/13 23:22:17
>>719
ありがとうございます。全部読みました。
基本的にはアンダースコアを使うべきだそうです。
スコープによって使い分けるのが良いみたいですね。
$Global_Data #グローバル
$tmp #局所
$LOCK_KIND #定数
>>720
プログラムの種類によって書き方が変わる、変えられるのがperlの利点かもしれませんね。
>全部の関数にhtml_
そういうのはパッケージにまとめればOKですかね。
おかげ様で書き方が頭に浮かんできました。ありがとうございました。
722:nobodyさん
08/01/14 02:09:11
Perlプログラマは"不精"なので面倒なタイピングはしません。
でもPerlプログラマは"傲慢"なので他人のコーディングスタイルを気にしません。
こんなイメージ。
723:nobodyさん
08/01/14 02:26:48
怠惰と傲慢と短気だっけなラリーの三原則。
ネーミング重要。(高橋メソッド風に)
でも職人芸的なところあるよねネーミングセンスって。
なかなかそこは難しい。
724:nobodyさん
08/01/14 04:10:53
果たして自閉症の描くイメージとは
725:nobodyさん
08/01/14 04:15:16
>>716
もう解決したみたいだけど、Perlベストプラクティスもおすすめ
ダミアン先生の盲信はいけないけど、かなりためになるYo
726:nobodyさん
08/01/14 17:41:01
ダミアン先生はPerl界屈指のハッカーだが、著作物での記述にクセが全くないわけではないからね。
一般論としては、上を目指すならいろんなハッカーのコードや文章にたくさん触れることが必要。
これがなかなか大変だし難しい。
そのためにはネット上のコミュニティーやリアルのイベントにこまめに参加したり
ブログを定期的にチェックし続けないといけないから。
そういうことをしてない自称Perl使いが結構俺の周りにはいて、
そういう奴らは我流のあまりエレガントじゃないスタイルから抜け出せないでいる。
727:nobodyさん
08/01/14 18:57:12 4AKnbZN2
ファイルに入っている文字を出力するつもりなのですが、
メタ字が混ざっていることもあり、ちゃんと出力できません。
あらかじめファイルの中のメタ字に\を振って置くとしても、かなりの手間になりそうですし、
何か効率の良いメタ字対策はないでしょうか?
728:727
08/01/14 19:02:23 4AKnbZN2
すみません。微妙に文書が狂っていました。
ファイルに入っている文字からの出力の際の
文字化けする文字の対策をお願いします。
729:716
08/01/14 20:00:43
>>725-726
オライリーファンの俺には最高の本かもです。
>>727-728
余計な事してるからじゃないですかね?
quotemetaなんてのはどうですか?
文字コードなんかも書くと返事もらえるかも。
730:nobodyさん
08/01/14 20:08:53
>>727
情報不足です。
「ファイルに入っている文字」…どんな文字? 文字コードは何?
「出力するつもり」…どこに出力するの?
「メタ字」…具体的にどの文字ですか?
「ちゃんと出力できません」…具体的にどのように出力できないのですか?
ありがちなのは、ファイルの中と、コンソールの文字コードの設定が異なっていて、文字化けしたように見えるとか。
メタ文字をいったん解釈してしまっているとか。
ヌル文字とかタブとか垂直タブとかグループセパレータとかasciiの制御コードはそもそも「文字」ではないですし。
「文字」をどう「出力」したいのかにもよります。
コードを示してはどうですか。
731:727
08/01/14 20:18:57 4AKnbZN2
$i = 0;
while($list = <IN>){
(undef,$name[$i],undef) = split(/:/, $list);
$i++;
}
@name = sort(@name);
while($line = <@name>){
print "<option value='$line'>$line</option>";
}
えーっと、コードはこのような感じです。
ファイルのDBにアクセスして、その中の一部を取り出しソートしてhtmlで出力するという形です。
732:nobodyさん
08/01/14 20:21:10
メタ文字がhtmlの解釈の問題を引き起こしてるんじゃないよね?
733:nobodyさん
08/01/14 20:23:30
metaタグで宣言している文字コードと異なるとか…
html中で使われてる文字コードと出力してる変数の文字コードの不一致とか…
734:727
08/01/14 20:30:22
>>733
タグで宣言しているコードは関係ないのではと思います。
出力するとき、一部の文字がうまく表示出来ていませんから。
735:727
08/01/14 20:32:56
現状としてはファイルの中の「ソ」とかに\を付けていけば表示はうまくいくのですが、
ファイルをその後書き換えたりするとそれも出来なくなるのではないかと思っております。
736:nobodyさん
08/01/14 20:40:00
これか?URLリンク(www.kentweb.jp)
737:nobodyさん
08/01/14 20:46:05
>>735
use utf8;
binmode STDIN, ':encoding(shiftjis)';
binmode STDOUT, ':encoding(shiftjis)';
# windowsなら shiftjis -> cp932
↑やってみて
ソース中に日本語文字列書くならutf8で保存してね。
738:nobodyさん
08/01/14 20:54:55
あw
binmode IN, ':encoding(shiftjis)';
かな?
739:nobodyさん
08/01/14 20:57:33
>>731
DBにアクセスしているのにファイルハンドルから@nameに格納しているとはいかに?
@nameへの格納の仕方が心許ないです。せめて以下のようにするとか。
my @name = map { (split(/:/))[1] } <IN>;
splitの対象が全角のコロンですが、perlソースと取り扱うデータの文字コードが合っていないと
間違いの元ですよ。
で、optionタグで書き出すべき文字列のリストが@nameに入っていて、それをどうしてグロブ
演算子を使っているのかわかりません。私はこんなこと一度もしたことありませんが…。
ここで、@nameの各要素がいったん解釈されてしまっていて、カタカナのソなどSJISの2バイト目の
\x5cが取り除かれてしまっています。単に
for (sort @name) {
print qq{<option value="$_">$_</option>\n};
}
でいいと思うのですが。
740:nobodyさん
08/01/16 00:34:21
CGI::Applicationで index.cgi?rm=<デタラメなキー> のように
run_modesで定義されなかったrun_modeを指定するとエラーが発生させられてしまうのですが
未定義の場合デフォルトのrunmodeを起動させる方法は無いでしょうか?
741:nobodyさん
08/01/16 02:08:57
$self->run_modes(
AUTOLOAD => \&catch_my_exception,
);
742:nobodyさん
08/01/16 02:17:14
>>741
ありがとうございます!試してみます。
743:nobodyさん
08/01/16 04:59:20 FWbaTTLj
5.005です。
以下のような、引数が省略可能なサブルーチンがあるとします。
sub Func(;$\@\%) { (省略) }
このとき、引数が渡されたのか、それとも省略されたのかを
Func内で判断する方法を教えてください。
なお、そのままifに入れると偽となるような値(例えばスカラーの値が0)の場合も、
引数が渡されていると判断します。
744:nobodyさん
08/01/16 05:29:59
>>743
引数の数から判定
sub Func(;$\@\%) { print scalar @_ }
Func(); # 0
Func(undef); # 1
Func(1, @hoge); # 2
745:nobodyさん
08/01/16 05:44:10
>744
ありがとうございます。
なるほど、サブルーチンを使う時は常に@_を意識しないとダメだってことですね。
746:nobodyさん
08/01/16 11:29:46
@_ ってカタツムリみたいだよね。
@_ii
747:nobodyさん
08/01/16 14:19:16 Z4nycbhz
かたつむり大作戦
748:nobodyさん
08/01/16 20:06:54 L/Qn1HzA
質問です!
入門書を見ながら「URLにパラメータを加える」というのをやりました。
~~/test.cgi?list=man
とURLにパラメーターをくっつけ、cgiで
&ReadParse( *form );
$sex = $form{ 'list' };
と受け取ったつもりだったのですが、結果をprintしてみると
manman
と2回表示されてしまいます。これは何が悪いのでしょうか?
749:nobodyさん
08/01/16 20:30:55
いるんだよ、自分で勝手に照会用のコードを切り詰める奴
750:748
08/01/16 20:51:36
失礼しました。手当たりしだい試してたら解決しました。
なんだか色々と間違ってたようです。
751:nobodyさん
08/01/16 22:40:40 QOevDgBW
CGIモジュール等を使わない、
一般的なuriデコードのバグってどんな事ですか?
同じkeyに複数のvalがある場合の対処はしてます。