- 1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???]
- Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
- 459 名前:nobodyさん mailto:sage [2007/10/30(火) 23:38:44 ID:???]
- 一つのファイルで処理がたくさん書いてあって分岐させる時に、
例えば $mode = $cgi->param('mode'); というデータを受け取って、処理の場合わけをする場合どういう書き方がエレガントなんでしょうか? 現状は if ($mode eq 'post') { &post} elsif ($mode eq 'edit') { &edit;} elsif ($mode eq 'delete') { &delete} else { &error} こんな感じなのですが、それは初心者の書き方だって馬鹿にされました。 悔しいのでもっと効率的な方法があったら教えてください。
- 460 名前:JAPU ◆lVJAPUTeX. mailto:sage [2007/10/30(火) 23:52:20 ID:???]
- >>459
エレガントかは分からないけど、分岐がある程度多い場合はこんな書き方だとすっきり書けるかと。 %actions = (post => \&post, edit => \&edit, delete => \&delete); if(exists $actions{$mode}) { $actions{$mode}->(); } else { error(); } 数個程度なら if で分岐されちゃってもいいと思いますし、実際そうしています。
- 461 名前:nobodyさん mailto:sage [2007/10/30(火) 23:58:03 ID:???]
- >>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さん mailto:sage [2007/10/30(火) 23:59:04 ID:???]
- ああ、丸かぶりだorz...
- 463 名前:nobodyさん mailto:sage [2007/10/31(水) 00:10:35 ID:???]
- せめて、CGI::Applicationくらい使っとけって話なんじゃ。
if文分岐も分かりやすいと思うが、へたに小細工するとますますへたっぴに見える。
- 464 名前:nobodyさん mailto:sage [2007/10/31(水) 12:11:23 ID:???]
- 三項演算子ってタマに見かけるけど読みづらいんだよな。
使いたくない書き方No1かも。
- 465 名前:nobodyさん mailto:sage [2007/10/31(水) 13:29:29 ID:???]
- $expr1 ? $expr2
: $expr3 ? $expr4 : $expr5 ? $expr6 : $expr7 ; 書き方か頭が悪いんだろ
- 466 名前:至急 mailto:cgisupport@xxne.jp [2007/10/31(水) 15:17:23 ID:???]
- CGIを自宅出張でサポートしてくれる方募集します。
CGIに詳しく都内に来れる方であれば可能 一日日払い即金で払います。 詳細はメール下さい。
- 467 名前:nobodyさん mailto:sage [2007/10/31(水) 15:47:41 ID:???]
- >>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さん mailto:sage [2007/10/31(水) 17:36:51 ID:???]
- >>467
外部からinitとか呼ばれちゃわない?
- 469 名前:nobodyさん mailto:sage [2007/10/31(水) 19:51:49 ID:???]
- >>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さん mailto:sage [2007/10/31(水) 20:11:48 ID:???]
- sub edit :method {
この :method って何の意味だっけ perlsub見ても載ってないや 変数にも付けれた気がしたが
- 471 名前:nobodyさん mailto:sage [2007/10/31(水) 21:09:19 ID:???]
- perlsub に載ってるし、perldoc attributesすれば詳細分る(perl5.8.1)。
perl attributes でググれば日本語のサイトも沢山出る。 変数に付けられるのは 5.8系
- 472 名前:nobodyさん mailto:sage [2007/11/01(木) 01:06:18 ID:???]
- 実際、CGI::Applicationとか使うと効率的になるの?
自分でゴチャゴチャ作るよりも。使ってる人いる?
- 473 名前:nobodyさん mailto:sage [2007/11/01(木) 02:26:10 ID:???]
- CGI.pmで書くには複雑だけど、Catalystとかのフレームワーク持ち出すまでもないときには使える
- 474 名前:nobodyさん mailto:sage [2007/11/01(木) 10:48:57 ID:???]
- > CGI.pmで書くには複雑だけど、Catalystとかのフレームワーク持ち出すまでもないときには使える
CGI::Application もフレームワークじゃないの?
- 475 名前:nobodyさん mailto:sage [2007/11/01(木) 17:27:41 ID:???]
- >>470
:methodは組み込みのattribute Attribute::Handlers使うと自作のattributeも作れる。 …がいつ仕様が定まってなくて変更があるかもってどっかで読んだ気がする。 >>474 ・自分しかいじらない ・少人数で知識の共有が容易 ・マニュアルが整っている のどれかなら自作のフレームワークの方が慣れてるだろうし開発効率いいんじゃないかな? フレームワーク自体のメンテナンスが(出来る|しなきゃいけない)のはデメリットか? 既製のフレームワーク使うのは ・他の人と知識の共有しやすい ・ドキュメントがある/(第3者も使ってるので)ノウハウが検索しやすい ・フレームワーク自身のメンテナンスを(あまり)しなくていい ってとこかな?
- 476 名前:nobodyさん mailto:sage [2007/11/01(木) 18:07:59 ID:???]
- >>475
???
- 477 名前:nobodyさん mailto:sage [2007/11/02(金) 11:22:36 ID:???]
- /public_html/test/log.txt を、UTF8→SJISに変換して、
別名で保存するにはどうすればいいでしょうか Perl 5.8.8なのでuse Encode;を利用する、読み取り専用で1行ずつ変換処理する あたりまでは勉強しました。スマートな方法よろしく御教示おねがいします
- 478 名前:nobodyさん mailto:sage [2007/11/02(金) 13:22:56 ID:???]
- ログをShift_JISに変換ではなく、表示する時にsjisに返還して表示するようにして、
データはutf-8のままのほうがよくないかな。
- 479 名前:nobodyさん mailto:sage [2007/11/02(金) 13:29:46 ID:???]
- >>477
まずは自分で書いた糞コード晒すのが先じゃね?
- 480 名前:nobodyさん mailto:sage [2007/11/02(金) 14:01:12 ID:???]
- >>477
おまえさんの「スマート」の基準が判らんのだが、 Encodeで何か不足でもあったのか?
- 481 名前:nobodyさん mailto:sage [2007/11/02(金) 16:43:20 ID:???]
- nkf -s log.txt > log.sjis.txt
- 482 名前:nobodyさん mailto:sage [2007/11/02(金) 17:17:33 ID:???]
- >>481
すげー!、シェルスクリプトですよね? sshができない場合はこんな感じで利用すればいいのかな system("nkf -s log.txt > log.sjis.txt"); 1つ気になるのがjcode.plなど元の文字コードを指定するのがあると思うのですが、 &jcode::convert(\$_, 'sjis' ,'utf8'); nkfでは気にしなくても自動判別完璧なのでしょうか?
- 483 名前:nobodyさん mailto:sage [2007/11/02(金) 17:34:58 ID:???]
- もはやPerlに何の関係もない
- 484 名前:nobodyさん mailto:sage [2007/11/02(金) 17:51:47 ID:???]
- >>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さん mailto:sage [2007/11/02(金) 22:18:35 ID:???]
- >>484
頭足りてないのは理解した。
- 486 名前:nobodyさん mailto:sage [2007/11/05(月) 07:24:22 ID:???]
- gethostbynameについての質問です。
コマンドプロンプトだとnslookup -> set type=*** UNIXならhost -t *** でクエリタイプを設定できるんですけど、PERLの場合はどうやるのでしょうか。
- 487 名前:nobodyさん mailto:sage [2007/11/05(月) 10:55:44 ID:???]
- >>486
search.cpan.org/~olaf/Net-DNS-0.61/lib/Net/DNS.pm#Find_the_nameservers_for_a_domain.
- 488 名前:nobodyさん [2007/11/05(月) 11:20:15 ID:6nXAnQ+n]
- ファイルのオープンでエラーになります。
open(FILE,">".$workFname) or die "Cannot Output File: "; あらかじめファイルを持たせておいて、書き込み権限を与えておけば 成功しますが、新規にファイルを作成できません。 どうすればいいのでしょうか。
- 489 名前:nobodyさん mailto:sage [2007/11/05(月) 12:21:09 ID:???]
- ディレクトリのパーミッションかな
- 490 名前:nobodyさん mailto:sage [2007/11/05(月) 13:05:21 ID:???]
- >>489
解決しました、ありがとうございます。
- 491 名前:nobodyさん mailto:sage [2007/11/05(月) 13:19:35 ID:???]
- die するときに $! も含めるべき。
- 492 名前:nobodyさん mailto:sage [2007/11/05(月) 13:22:45 ID:???]
- 自分の環境では、相対パスではエラーになるので、絶対パスに書き換えてます。
できれば相対パスのままで動くようにしたいです。どうすれば解決できるか分かる 方はおられませんか。まあ、あまり解決策が複雑なら、とりあえずあきらめてこの ままにしておくつもりですが。
- 493 名前:nobodyさん mailto:sage [2007/11/05(月) 14:36:06 ID:???]
- >>492
まず「何を」相対パスにしようとしているのかくらい書こうぜ。 あと「自分の環境」は書かなきゃ誰にも伝わらない。
- 494 名前:nobodyさん [2007/11/07(水) 09:25:24 ID:R3XG8Srf]
- Perlで関数の引数に二次元配列を渡すのは無理ですか。
- 495 名前:nobodyさん mailto:sage [2007/11/07(水) 09:32:37 ID:???]
- >>494
ヒント:リファレンス
- 496 名前:nobodyさん [2007/11/07(水) 11:46:06 ID: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さん mailto:sage [2007/11/07(水) 11:47:42 ID:???]
- 誤: usort_kansu(@databox1);
正: kansu(@databox1);
- 498 名前:nobodyさん mailto:sage [2007/11/07(水) 12:36:16 ID:???]
- >>496
「言語的意味で」正しく挙動させるには foreach $value1($ref1) { (多分)あなたの望んだ挙動にするには ソースの殆どに手を入れる必要がある。 ∴ 本読んでからどうしても分らんかったら 質問し直せ
- 499 名前:nobodyさん mailto:sage [2007/11/07(水) 14:24:36 ID:???]
- >>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さん [2007/11/07(水) 15:22:14 ID:vLJSXT0R]
- コーディングじゃないのですが該当スレが見当たらず、新規スレにするような質問でもないと思いこちらに質問します。
.qmailからperlスクリプトを呼び出しているのですが、その場合エラーログを取るにはどうしたらよいのでしょうか? 不正終了しているようなのですが、原因がつかめません。
- 501 名前:nobodyさん mailto:sage [2007/11/07(水) 15:43:21 ID:???]
- eval { require スクリプト; };
if ($@) { open(LOG, ">>/path/to/ログファイル名") or die; print LOG "WARNING: $@"; close(LOG); } こういうスクリプトをqmailから呼び出せばどーよ >499 forearch行を書き換える条件だからforearch my $value (@_){ って書いて欲しかったのかと・・
- 502 名前:501 mailto:sage [2007/11/07(水) 15:59:10 ID:???]
- foreach $value1($ref1,@_) {
こうか
- 503 名前:500 mailto:sage [2007/11/07(水) 16:13:30 ID:???]
- >>501
ありがとうございます。 試してみます
- 504 名前:nobodyさん mailto:sage [2007/11/07(水) 18:20:14 ID:???]
- STDERRに吐いた文字はqmailのログにのこるでしょ?
ログが見えないならプログラムを置くべきではないと思う。
- 505 名前:nobodyさん mailto:sage [2007/11/07(水) 18:46:18 ID:???]
- >>504に同意だけど、
とりあえず、STDERRをファイルにでもリダイレクトすればどうなん?
- 506 名前:500 mailto:sage [2007/11/07(水) 19:59:45 ID:???]
- >>504
qmailのログとはmaillogでしょうか? スクリプトからは何もログを吐いていないんです。 sudoでapache権限で実行してるからログ吐かないのかな。
- 507 名前:nobodyさん mailto:sage [2007/11/07(水) 20:05:11 ID:???]
- |/path/to/script.pl >> /path/to/error.log 2>&1
- 508 名前:500 mailto:sage [2007/11/07(水) 20:13:46 ID:???]
- >>507
ありがとうございます。 .qmailでもログ指定しないといけないんですね。
- 509 名前:nobodyさん mailto:sage [2007/11/07(水) 21:32:38 ID:???]
- >>500
何かとんでもない設定でqmail動かして無いか?
- 510 名前:500 mailto:sage [2007/11/07(水) 22:29:30 ID:???]
- >>509
いえ。 .qmail内でperlのみsudoしてapache権限で動かしてます。 qmailはvpopmail権限で動かしてますよ。 >>507さんでログ取れました。m(__)m
- 511 名前:nobodyさん mailto:sage [2007/11/09(金) 15:33:58 ID:???]
- UTF-8でperlを書きたいのですが、文字コードをperlにどのように知らせればよいのでしょうか?
- 512 名前:nobodyさん mailto:sage [2007/11/09(金) 15:47:46 ID:???]
- >>511
plagger のソース読むといいよ!
- 513 名前:nobodyさん mailto:sage [2007/11/09(金) 17:28:52 ID:???]
- >>512
それ無理に流行らそうとしなくていいよ
- 514 名前:nobodyさん mailto:sage [2007/11/09(金) 17:49:37 ID:???]
- tokuhirom自重
- 515 名前:nobodyさん mailto:sage [2007/11/09(金) 18:08:33 ID:???]
- Perl死んじゃうん?
- 516 名前:nobodyさん mailto:sage [2007/11/09(金) 18:57:53 ID:???]
- (・∀・)ニヤニヤ
- 517 名前:JAPU ◆lVJAPUTeX. mailto:sage [2007/11/09(金) 18:59:46 ID:???]
- >>511
use utf8;
- 518 名前:nobodyさん [2007/11/09(金) 19:09:09 ID:8S2oyKnm]
- >511
use dan; で解決するよ。
- 519 名前:nobodyさん mailto:sage [2007/11/09(金) 19:26:50 ID:???]
- tokuhirom の直近の発言をコピペすることによりスレを荒らす tokuhacks.
- 520 名前:nobodyさん mailto:sage [2007/11/09(金) 21:31:54 ID:???]
- plaggerのソース読めって言ってるやつのほとんどはplaggerのソースが読めない
- 521 名前:nobodyさん mailto:sage [2007/11/09(金) 22:28:46 ID:???]
- コード解説読めってならともかくコード読ませたってしょうがないだろ。Perlなんだから
- 522 名前:nobodyさん [2007/11/09(金) 23:35:40 ID:8S2oyKnm]
- tokuhiromのソース読めって言ってるやつのほとんどはtokuhiromのソースが読めない
- 523 名前:nobodyさん mailto:sage [2007/11/09(金) 23:39:07 ID:???]
- プラガー(笑)
- 524 名前:nobodyさん [2007/11/10(土) 10:49:28 ID:Z9OcedPC]
- web上の圧縮ファイル(.lzh)をダウンロードして保存、
さらにその圧縮ファイルを解凍するスクリプトを作りたいです。 例えば、LWP::Simpleを使った場合 my $dat = get('hoge.com/071110.lzh'); の後はどう処理していけばいいでしょうか?
- 525 名前:nobodyさん mailto:sage [2007/11/10(土) 11:02:39 ID:???]
- > の後はどう処理していけばいいでしょうか?
lha 書庫を解凍する処理を行えばよい。
- 526 名前:nobodyさん mailto:sage [2007/11/10(土) 11:03:28 ID:???]
- >>524
はい。 www.google.co.jp/search?q=lzh+%E8%A7%A3%E5%87%8D+perl&ie=utf-8&oe=utf-8
- 527 名前:nobodyさん mailto:sage [2007/11/11(日) 02:16:45 ID:???]
- 2chみたいに携帯から固有のIDを作りたいんですが
どうすればいいんでしょうか。
- 528 名前:nobodyさん mailto:sage [2007/11/11(日) 07:14:50 ID:???]
- >>527
i-mode:UTN EZweb:HTTP_X_UP_SUBNO Y!:UA
- 529 名前:nobodyさん [2007/11/11(日) 14:32:10 ID:4iiY3aOI]
- 正規表現について質問です。
urlからファイル名だけを取り出したいです。 例えば、$urlという変数に下の3つのurlがあった場合は hoge1.html, hoge2.html, hoge3.htmlを取り出したいです。 localhost/hoge1/hoge1.html localhost/hoge1/hoge11/hoge111/hoge2.html localhost/hoge2/hoge21/hoge3.html 下のように自分でやってみたのですが、localhostの前の/から取得してしまいます。 if( $url =~ /\/(.*\.html)$/ ){ print $1 . "\n"; } どうすればやりたい事ができますか? 教えてください、お願いします。
- 530 名前:nobodyさん mailto:sage [2007/11/11(日) 14:35:11 ID:???]
- ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。
あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?
- 531 名前:529 mailto:sage [2007/11/11(日) 14:47:19 ID:???]
- >>530
レス有難うございます。 >ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。 なるほど。でも頭では理解できてもそれをコーディングするとなると・・・ .*の部分を弄ればいいのかなぁ。 >あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね? はい、このパターンは今回ありえないっす。
- 532 名前:529 mailto:sage [2007/11/11(日) 14:58:10 ID:???]
- 条件文を下のコーディングに変更したらできました。
if( $url =~ /\/([^\/]*\.lzh)$/ ){ 正規表現すげー >>530さんアドバイスありがとうございました。
- 533 名前:nobodyさん mailto:sage [2007/11/12(月) 08:03:25 ID:???]
- .*?も覚えたらいいとおも
- 534 名前:nobodyさん [2007/11/12(月) 16:33:29 ID:XNEEDQVz]
- そのファイルがバイナリなのかテキスト(shift-jis,euc,utf8)なのかを判断するにはどのようにしたら良いのでしょうか?
最初、linuxの fileコマンドを使用していたのですが誤認識がよくあり使えません。 バイナリなのかテキストなのかだけ分かればいいのですがperlでそれを行うにはどのようにしたら良いのでしょうか?
- 535 名前:nobodyさん mailto:sage [2007/11/12(月) 16:42:39 ID:???]
- ファイルテスト演算子
- 536 名前:nobodyさん [2007/11/12(月) 18:17:28 ID:XNEEDQVz]
- >>535
有難う御座います。 試してみましたが、EUCだったり10文字程度のcp932などの場合に誤認識するようです。
- 537 名前:nobodyさん mailto:sage [2007/11/12(月) 18:33:52 ID:???]
- \0が含まれてればバイナリでいいんでないの
それ以外だと各文字コードの仕様を調べて 全データがそれに矛盾してないか判断するしかないと思
- 538 名前:nobodyさん mailto:sage [2007/11/12(月) 18:39:12 ID:???]
- 正規表現使えばいいじゃない
- 539 名前:nobody [2007/11/13(火) 03:52:36 ID:fKqfq45H]
- ttp://www.jpopfan.co.jp/uranai/uranai000.htm
上のサイトのようなゲームを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 [2007/11/13(火) 03:57:04 ID:fKqfq45H]
- 539の続きです。
HTMLのフォームから情報をCGIに送り、最初の質問に対してYesならAの質問、NoならBの質問・・・というように 答えによって質問を分岐させるように作りたいです。 if文でひたすら分岐するというイメージはありますが、どうすれば、送信ボタンを押した時に次の質問ページにリンクさせる事ができるかが分かりません。 質問ページは一つ一つ作りたいです。 よろしくお願いします。
- 541 名前:nobodyさん mailto:sage [2007/11/13(火) 04:18:50 ID:???]
- そういうアルゴリズムも含めて課題になってるんじゃねーのか・・・まぁいいけどさ。
で、htmlはともかくどこまでperl書いたのよ。まさか1行も書かずに相談しにきてるわけじゃあるまい?
- 542 名前:nobodyさん mailto:sage [2007/11/13(火) 06:54:14 ID:???]
- 何日か前に別のスレでも見たけど、ここで聞いてて課題間に合うの?
- 543 名前:nobodyさん mailto:sage [2007/11/13(火) 08:58:39 ID:???]
- あみだくじでいいのか、選択によってポイントがたまってその結果で振り分けられるのか。
色々ロジックはあると思うけど、そこら辺はどうするのかな
- 544 名前:nobodyさん mailto:sage [2007/11/13(火) 09:17:32 ID:???]
- >542
提出日まで1〜2週間とかなら大丈夫じゃない? その昔、C言語の授業があって、その授業終了直後に提出したら怒られたことがあったなあ(笑) ごめん、確かに授業聞いてませんでした。
- 545 名前:nobodyさん mailto:sage [2007/11/13(火) 09:19:51 ID:???]
- あみだくじでいいなら、
<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さん mailto:sage [2007/11/13(火) 10:36:02 ID:???]
- HTMLでおk
- 547 名前:nobodyさん mailto:sage [2007/11/13(火) 11:10:10 ID:???]
- リンク元のURLに%??%??〜が含まれてる場合に、その文字をデコードしてUTF-8として表示しようとしています。
元の文字コードがUTF-8のときは問題なく表示できるのですが、 文字コードの判別を含めてやる場合どうやったらいいのでしょうか? Perlのバージョンは5ですが、プロバイダ(@nifty)のサーバーのため標準モジュールを使用できません。 いきなり変換が難しいならUTF-8か否かを判別できれば、 UTF-8の場合→直デコード UTF-8でない場合→直デコード→jcode.plで変換 でいいのかもと考えているのですが、UTF-8か否かの判別法がわかりません。 よろしくお願いします。
- 548 名前:nobodyさん [2007/11/13(火) 15:19:48 ID: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さん mailto:sage [2007/11/13(火) 15:34:47 ID:???]
- use constant Yes => 'Yes';
- 550 名前:nobodyさん mailto:sage [2007/11/13(火) 15:56:31 ID:???]
- 課題は自分でやれwww
- 551 名前:nobodyさん mailto:sage [2007/11/13(火) 16:29:42 ID:???]
- >>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さん mailto:sage [2007/11/13(火) 16:30:23 ID:???]
- レス番ミスった。
誤 >>54 正 >>548
- 553 名前:nobodyさん mailto:sage [2007/11/13(火) 16:31:27 ID:???]
- さらに訂正。
誤 $fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<'); 正 $fh->open( File::Spec->catfile( $html_dir, $fn ) '<');
- 554 名前:nobodyさん [2007/11/17(土) 14:33:33 ID:GlJQ98hk]
- oshiete.new-akiba.com/archives/2007/01/webarchivedlwarrick.html
ここを見ながらコマンドプロンプトを操作しているのですが ダウンロードされる段階まで行っても 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さん mailto:sage [2007/11/17(土) 15:24:40 ID:???]
- >>554
エラーの原因は@INCが空になってるから。なんでそうなってるのかは知らん。 ActivePerlを入れ直してみたら? あとここはコーディングスレだからスレ違いだと思わなくもない。
- 556 名前:nobodyさん mailto:sage [2007/11/17(土) 20:14:46 ID:???]
- >>555
最新版入れてみたけど同じでした 質問スレいってきます
- 557 名前:nobodyさん mailto:sage [2007/11/17(土) 20:58:37 ID:???]
- >>にアンカを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さん mailto:sage [2007/11/17(土) 22:00:49 ID:???]
- $i = 0; $buf =~ s/(>>\d+)/$i++ < 3 ? "LINK:$+" : $+/egs;
- 559 名前:556 mailto:sage [2007/11/17(土) 22:23:56 ID:???]
- >>558
ありがとうございます。 そんな書き方知りませんでした。
|

|