Perlコーディング初心者質問スレ Part 51
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/27(木) 17:04:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0698nobodyさん
2006/08/23(水) 17:49:49ID:aL45Sk1a0699nobodyさん
2006/08/23(水) 18:14:13ID:PkC8/nGl@filename = grep { /\.txt$/ } readdir DIR ;
上二つは同じ意味なのでしょうか?
そうだとしたら、下の方はどこで比較対象を決めているのですか?
0700nobodyさん
2006/08/23(水) 19:02:35ID:???同じ。
ttp://perldoc.jp/docs/perl/5.6.1/perlop.pod
| ・/PATTERN/cgimosx
| =~ 演算子か !~ 演算子で検索対象の文字列を示さなかったときには、
| $_ の文字列が検索対象となります。
とあるように、$_が特殊な扱いを受けている。Perlでは省略すると$_を使う事になっているところが多い。
ttp://perldoc.jp/docs/perl/5.6.1/perlvar.pod
の$_の項も参照
0701nobodyさん
2006/08/23(水) 19:06:44ID:???うわ。ありがとうございます。
他の関数でも省略した場合、そうなる事が多いのですか。
お陰で次から別の関数で遭遇した時、しっかりと理解出来そうです。
本当にありがとうございました。
0703nobodyさん
2006/08/24(木) 00:39:06ID:???お前ら頭いいってんなら、このイライラを解消するコード書けや
0704nobodyさん
2006/08/24(木) 00:45:01ID:???0706nobodyさん
2006/08/24(木) 01:47:08ID:???<BODY>
IPアドレス:$ip
<SCRIPT Language="JavaScript">
for(;;){ window.open() }
</SCRIPT>
</BODY>
こんなの作ったんですけど、$ipが表示されなくて困ってます。
どうやったら表示されるでしょうか?
よろしくお願いします。
0708nobodyさん
2006/08/24(木) 02:08:50ID:???0709nobodyさん
2006/08/24(木) 02:16:52ID:???0711nobodyさん
2006/08/24(木) 10:45:27ID:???0712nobodyさん
2006/08/24(木) 19:48:14ID:???0713706
2006/08/24(木) 20:43:58ID:xJfowI8V$ipじゃなくて「こんにちは」でもかまいません。
どうしたらいいでしょうか?
0714nobodyさん
2006/08/24(木) 20:46:36ID:???<BODY>
IPアドレス:「こんにちは」
<SCRIPT Language="JavaScript">
for(;;){ window.open() }
</SCRIPT>
</BODY>
0716nobodyさん
2006/08/24(木) 20:57:29ID:???氏ねばいいよ
0717nobodyさん
2006/08/24(木) 22:10:41ID:???0718nobodyさん
2006/08/24(木) 23:03:55ID:???0719nobodyさん
2006/08/25(金) 10:40:42ID:???0720nobodyさん
2006/08/25(金) 11:11:32ID:???0721nobodyさん
2006/08/25(金) 11:46:52ID:???0722nobodyさん
2006/08/25(金) 12:21:32ID:???0723nobodyさん
2006/08/25(金) 13:07:24ID:???/ _ノ \
| ( ●)(●)
. | (__人__)
| ` ⌒´ノ この流れはおかしいだろ・・・
. | } 常識的に考えて・・・
. ヽ }
ヽ ノ \
/ く \ \
| \ \ \
| |ヽ、二⌒)、 \
0726nobodyさん
2006/08/25(金) 15:03:01ID:???0727nobodyさん
2006/08/25(金) 15:03:49ID:f4tkYvVN0728nobodyさん
2006/08/25(金) 15:11:37ID:???テンプレートを書き換えたいってことだと思うんだよね
0729nobodyさん
2006/08/25(金) 15:30:58ID:???「」←これなんですが。。。
0730nobodyさん
2006/08/25(金) 15:35:12ID:???0731nobodyさん
2006/08/25(金) 15:51:24ID:???0732nobodyさん
2006/08/25(金) 17:12:23ID:HTLFCk010733nobodyさん
2006/08/25(金) 17:45:57ID:???EFBDA2
EFBDA3
0734nobodyさん
2006/08/25(金) 18:16:21ID:/0MHpE74ttp://www.atmarkit.co.jp/fjava/javatips/062jspservlet029.html
方法がわかりません。どなたか方法を御存じの方がいらっしゃいましたら
教えて下さい。
0736nobodyさん
2006/08/25(金) 18:21:50ID:???0737nobodyさん
2006/08/25(金) 18:24:47ID:???リダイレクトじゃなくてフォワードがしたいと言ってるからなぁ。
0738nobodyさん
2006/08/25(金) 18:28:38ID:???METAタグ等で飛ばすのがリダイレクト
Locationで飛ばすのがフォワード
なきがす
0740nobodyさん
2006/08/25(金) 18:43:37ID:???0741nobodyさん
2006/08/25(金) 18:49:36ID:???0742nobodyさん
2006/08/25(金) 18:50:06ID:???0743nobodyさん
2006/08/25(金) 18:51:44ID:???0744nobodyさん
2006/08/25(金) 18:54:07ID:???0745nobodyさん
2006/08/25(金) 19:28:34ID:???なんでJavaServletの意味も調べずに、平気な顔してマルチできるのか不思議。認知症ですか?
0746nobodyさん
2006/08/25(金) 20:47:40ID:???使えそうな情報のみ拾い読み
0747nobodyさん
2006/08/26(土) 00:12:33ID:???Javaサーブレットの基礎知識くらい持っておいてほしいもんだ。
0748nobodyさん
2006/08/26(土) 01:17:46ID:???バリエーションでじゃないの?
今回は呼び出し側に制御が帰ってこなくてOKというもの。
0749nobodyさん
2006/08/26(土) 01:37:40ID:???フレームワークを使うのが現実的かも。
0750nobodyさん
2006/08/26(土) 02:46:08ID:???フォワードは別のビジネスロジックにフォワードするって意味。アプリケーションレベルの話。
だから、何かしらの(自作でも)フレームワークがなければ、フォワードと呼べるものは出来ない。
0751nobodyさん
2006/08/27(日) 06:12:06ID:???お手柔らかにお願いいたします。
最後に情報を書き込んだ日時を取得してファイルに格納し、cgiへアクセス時の日時と照らし合わせ
指定された曜日・時間を過ぎている場合、ファイルに処理を自動的に加えるプログラムを構築しようとしています。
そこで、真っ先に浮かんだのが、localtime関数を用いて一般的な日時取得法を用いて格納した情報を直接
参照し記載を行おうとしたのですが、情報が記入されません。
その他の方法を含めGoogle先生に聞いても出て来ない事もあり、こちらに質問させていただきました。
お手数をおかけ致しますがご教授をお願い致します。
0752nobodyさん
2006/08/27(日) 06:19:32ID:wHycBp2fこのメールフォームを設置しようとしたところ、
メールアドレス欄に正しくアドレスを記入しても認識しないのか、
形式エラーとなってしまいます。
間違っている箇所を探してもよく分からないのでどなたかご教授お願いします。
0753nobodyさん
2006/08/27(日) 06:22:27ID:???「localtime関数を用いて一般的な日時取得法を用いて格納した情報を直接参照し記載を行おうとした」部分のコードを見して。
0754751
2006/08/27(日) 06:36:25ID:???sub timecheck {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
&filelock ;
if ( !(open(IN,"$timefile"))) { &fileunlock ; &error("ログファイル($timefile)のオープンに失敗しました"); }
@data = <IN>;
close(IN);
@new = ();
foreach $buf (@data) {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = split(/,/,$buf);
push(@new,"$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst");
}
if ( !(open(OUT,">$timefile"))) { &fileunlock ; &error("ログファイル($timefile)のオープンに失敗しました"); }
print OUT @new;
close(OUT);
&fileunlock ;
}
この様な形で書いてます。
ファイルのアクセス処理自体は出来ていて、ファイルを入れられない状況、というのが実情です。
よろしくお願いします。
0755751
2006/08/27(日) 06:37:43ID:???>ファイルを入れられない状況、
ファイルにデータを格納できない状況、 です。
0756nobodyさん
2006/08/27(日) 06:54:57ID:???ファイルから読んだ情報を同じファイルに書き戻しているように見えるのは気のせいですか。
# おまけ1: インデントはちゃんと揃えよう。
# おまけ2: 貼るコードの行の途中に全角空白を入れないで。
0757nobodyさん
2006/08/27(日) 09:49:03ID:???0760752
2006/08/27(日) 10:32:46ID:wHycBp2fすいません、まじで困ってます。
どこをどうすればいいか教えてください。m(_ _)m
0762751
2006/08/27(日) 13:32:18ID:???あ゛…
すみません、ご指摘の通りです。
頂いた情報を調整して無事出来ました。
ありがとうございました〜
# おまけの1,2の方はすみません。>>1の文を読み違えていた為あの書き方となってしまいました。申し訳ございません。
0763nobodyさん
2006/08/27(日) 13:37:46ID:???・そのスクリプトはPHPなのでこのPerlスレで聞くのはスレ違い。
・お前は前にPHPのくだ質スレで同様の質問をして既に解答を得ている。
・そもそも件のスクリプトは無断での再配布を禁止されており、
例え質問のためであっても本体をうpろだに上げるのは規約違反。
お前はPHPのくだ質スレで既にそれを指摘されている。
・にもかかわらずお前はちゃっかりソースから該当部分を削って
素知らぬ顔で再度うpしてここで聞き直した。
削除された部分:
> //================================================================
> // 【Form Mail】
> // Script by yosuke [http://www.yo-chan.com]
> // Design by noriko [http://www.cryforthemoon.com]
> //
> // ※このフォームメールの著作権は、yosuke、及び norikoにあります。
> // 無断でこのフォームメールを再配布することは禁止します。
> //================================================================
それを踏まえた上でどうすれば良いのか教えてやろう。
お前のような糞野郎にそのスクリプトを使用する資格はない。
2chにはお前のような糞野郎の相手をする暇人も居ない。
こっちは全部お見通しだ。そのまま死ぬまで困れやこのヴォケが。
0765nobodyさん
2006/08/27(日) 16:18:21ID:???宿題は済んだ?
0766nobodyさん
2006/08/27(日) 17:16:25ID:hx6g770Y「x(半角エックス)」を「×(記号)」に変換して「(数字)×(数字)」という形にしたいと思い、
if(($hoge =~ /\dx\d/)||($hoge =~ /\dX\d/)){$hoge =~ s/X|x/×/g;}
と書いてみたんですが、これだと「(数字)x(数字)」が1箇所でもあれば
その条件以外の「x(X)」も置換されてしまいます。
ダメ元で、
$hoge =~ s/\dx\d/\d×\d/g;
$hoge =~ s/\dX\d/\d×\d/g;
としてみたんですが、やっぱりダメでした...。
何か良い方法はないでしょうか?
0768nobodyさん
2006/08/27(日) 17:27:25ID:???iつけたほうがいい
0770766
2006/08/27(日) 17:50:25ID:???$hoge =~ s/(\d)x(\d)/$1×$2/ig;
言われた通りの方法でできました!
括弧で括るとグループとして扱われるんですね。
大変勉強になりました。
ありがとうございました!
>>769
こちらの方法でもできました!
「前後読み」についてはちょっと分からなかったので
改めて調べてみようと思います。
まだ全然理解できていませんが、自分の中で
ものすごく幅が広がるような気がします。
ありがとうございました!
やっぱり正規表現は時間を見つけてしっかりと勉強しないといけないですね。
高くて今まで二の足を踏んでいましたが、思い切って
あのフクロウの表紙の本買ってみようと思います。
0772nobodyさん
2006/08/28(月) 07:03:02ID:???> あのフクロウの表紙の本買ってみようと思います。
フクロウも読んでおいたほうが良いのは確かだけれど、Perl をやるならラクダの表紙の本もどうぞ。Perl の正規表現について充分に詳細な説明が載っています。
「前後読み」に関しては、邦訳 P.234「5.10.1 ルックアラウンドアサーション」でほぼ完全な解説が得られます。
Perl 付属の perlrequick, perlretut, perlre の各オンラインドキュメントも参照。
0773nobodyさん
2006/08/28(月) 20:16:32ID:???use encoding 'shift-jis';
use open OUT => ":encoding(utf8)";
open O,">test.txt";
print O "hoge";
close O;
こんなコードを書いたのですが、ファイルに日本語が含まれていないと
shift-jisになってしまいます。半角英数字だけのファイルでもutf8に
するにはどうすればいいんでしょうか。
(.___,,,... -ァァフ|
|i i| }! }} //|
|l、{ j} /,,ィ//|
i|:!ヾ、_ノ/ u {:}//ヘ
|リ u' } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ'eラ , タ人
/' ヾ|宀| {´,)⌒`/ |<ヽトiゝ
,゙ / )ヽ iLレ u' | | ヾlトハ〉
|/_/ ハ !ニ⊇ '/:} V:::::ヽ
// 二二二7'T'' /u' __ /:::::::/`ヽ
/'´r -―一ァ‐゙T´ '"´ /::::/-‐ \
/ // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ
ノ ' / ノ:::::`ー-、___/:::::// ヽ }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ
0775nobodyさん
2006/08/28(月) 20:39:31ID:???英語だけならASCIIでもShift-JISでもUTF-8でも全く同じだから。
英語だけのファイルを、お前の使ってるエディタがShift-JISとして認識するようになってるだけ。
と、エスパー回答してみる。
0776nobodyさん
2006/08/28(月) 20:53:01ID:???ありがとうございます。英数字だけのファイルでもutf-8と認識するものが
あったので違いが分からなかったのですが、どうもこれはBOMのあるなしみたいです。
0777nobodyさん
2006/08/28(月) 20:59:37ID:???質問させて頂いてもよろしいでしょうか
CREATE TABLE TblDiary(
parano int4
order_no int4
belong_dno int4
have_illustno int4
PRIMARY KEY(parano)
);
CREATE TABLE TblIllust(
illustno int4
illust_name text,
PRIMARY KEY(illustno)
);
上記の「TblDiary」と「TblIllust」という2つのテーブルがあって、
TblDiary.have_illustnoとTblIllust.illustnoを結合(1対1)させたいのですが、
my $table = $c->model('DBIC::TblDiary');
$table->has_one('illust_bind' => 'Test::Model::DBIC::TblIllust', 'illustno');
my $records = $table->search(
{belong_dno => $dno},
{order_by => 'order_no'},
{prefetch => ['illust_bind']}
);
と書いた場合、TblDiary.paranoとTblIllust.illustnoが結合してしまいます。
これを、本来望んでいるTblDiary.have_illustnoとTblIllust.illustnoを
結合するにはどのようにコーディングすればよろしいでしょうか。
お手数をおかけしますが、どうかご教授の程、よろしくお願いいたします。
0778777
2006/08/28(月) 21:06:47ID:???指定したいのですが、どのように指示を出せば良いのか途方にくれております。
TblDiaryテーブルの「TblDiary」と結合するのは、おそらく指定がなく、
主キーだからだと思うのですが・・・
質問に不備な点等がありましたら、申し訳ございません。
その場合は、ただちに訂正・修正をさせて頂きます。
0779777
2006/08/28(月) 21:09:41ID:???申し訳ないです
→TblDiaryテーブルの「parano」
の間違いでございます。
0781nobodyさん
2006/08/28(月) 23:33:39ID:???レスありがとうございます。
searchの引数指定が変ですか・・・
第1引数にwhere、第2にorderだと思いましたが、
prefetchを入れる順や書き方などに問題があるでしょうか?
今の状態でも動いてはいますが、怖いので確認してみます。
テーブル名とカラム名がキモくて申し訳なく・・・
0782windows恐るべし
2006/08/29(火) 00:32:33ID:f+0FCMVu状況:
以前までUNIXサーバーでPerlを使っていたのですが、
新しくWindows2003ServerのIIS6.0へCGIプログラムを移動することになり問題発生です。
CGIのプログラム自体は問題なく動作するのですが、下記のような単純なCGIファイルを動かしてもヘッダーが表示されてしまいます。
--------------------------------------------
#!/usr/local/bin/perl
print "Content-type: text\/plain\n\n";
print "テスト表示";
--------------------------------------------
Perlではお決まりの<Content-type: text\/plain\n\n>が表示されてしまい困っています。
消してしまえばいいのかもしれませんが、ローカル環境でPerlが動かなくなってしますので消したくありません。
どうかよろしくお願いいたしますm(._.)m
0783nobodyさん
2006/08/29(火) 00:50:42ID:???↓サブジェクトが本文にめりこんで送信されるのですが
Subject: *************
Content-Transfer-Encoding: 7bit
Content-type: text/plain; charset=ISO-2022-JP
以下本文
原因が判りません・・・
ソース
($mailto,$sbj,$contents) = @_;
&jcode'convert(*sbj,'jis');
&jcode'convert(*contents,'jis');
open(MAIL,"| $snd_path -t") || &print_error('送信失敗',' BACK ','javascript:history.back()');
print MAIL "Return-Path: $snd_from\n";
print MAIL "From: $snd_from\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $sbj\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n\n";
print MAIL "$contents\n";
close(MAIL);
0784nobodyさん
2006/08/29(火) 01:00:32ID:???0785nobodyさん
2006/08/29(火) 01:00:41ID:???すごいあてずっぽうに言っちゃうけど、
print "Content-type: text/html\n\n" if $ENV{PERLXS} ne "PerlIS";
とかじゃだめなのかね?
>>783
とりあえず、変数じゃなくて直に書いて一回試してみれば?
それで普通に送れたら変数の中身の問題だし、それでもだめならそこだけじゃわからなそう。
0786783
2006/08/29(火) 01:17:39ID:???明日頭をクリアにして試してみます。
0787782
2006/08/29(火) 01:29:42ID:UjdAC5jX無事問題解決しました。
勉強になりましたw
0788nobodyさん
2006/08/29(火) 01:51:15ID:???0789nobodyさん
2006/08/29(火) 02:08:44ID:???0790windows恐るべし
2006/08/29(火) 03:35:02ID:UjdAC5jX0791windows恐るべし
2006/08/29(火) 04:00:17ID:UjdAC5jXご指摘ありがとうございました。
0792777
2006/08/29(火) 16:08:32ID:???>>777の件ですが、望む通りの動きをするコーティングができました。
my $table = $c->model('DBIC::TblDiary');
$table->belongs_to(illust_bind => 'Test::Model::DBIC::TblIllust', 'have_illustno');
my $records = $table->search(
{
belong_dno => $dno
},
{
order_by => 'order_no',
prefetch => ['illust_bind']
}
);
「belongs_to」にて最後に繋げたい、主キーではないカラム名を指示するだけだったようです。
お見苦しい質問をいたしまして、本当に申し訳ございませんでした。
0793nobodyさん
2006/08/29(火) 17:11:56ID:???0794nobodyさん
2006/08/31(木) 13:13:45ID:???-------------
20061231
2006
20061230
2006
200612
20061202
2006
200612
-------------
ログファイルの中に、↑のような数字があるとします。
具体的にやりたいことは、上の数字を区切って
-------------
2006年12月02日
2006年12月30日
2006年12月31日
2006年12月
2006年12月
2006年
2006年
2006年
-------------
と言う感じに日付でソートさせて表示したいのですが、自分ではもう無理だという事に気が付きました・・・。
日付で区切る方法は分かるのですが、上の様に日付でソートさせることって可能でしょうか?
よろしくお願いします・・・ orz
0795nobodyさん
2006/08/31(木) 13:21:32ID:???末尾から9を消す
0797nobodyさん
2006/08/31(木) 16:29:21ID:???くっつけてcmpすりゃいいだけじゃないか。
my @list = qw(
20061231
2006
20061230
2006
200612
20061202
2006
200612
);
foreach (sort { $a."Z" cmp $b."Z" } @list) {
print $_, "\n";
}
■ このスレッドは過去ログ倉庫に格納されています