Perlコーディング初心者質問スレ Part 59
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2009/02/16(月) 11:42:29ID:gvPTpodw【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0002nobodyさん
2009/02/16(月) 11:42:52ID:gvPTpodw[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/~rgarcia/perl-5.10.0/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.perl.org: ttp://perldoc.perl.org/
0003nobodyさん
2009/02/16(月) 11:44:03ID:gvPTpodw[モジュール]
CPAN: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004nobodyさん
2009/02/16(月) 20:24:32ID:???嘘つきました、すいません。
0005nobodyさん
2009/02/16(月) 20:27:50ID:???0006nobodyさん
2009/02/17(火) 00:20:41ID:???0007nobodyさん
2009/02/17(火) 03:27:54ID:???Web::Scraperとかどうよ
0008nobodyさん
2009/02/17(火) 04:11:20ID:???0009nobodyさん
2009/02/17(火) 11:38:27ID:???my @list = qw/a b c d e f g/;
my $test1 = @list;
my ($test2) = @list;
print "test1 = $test1\n";
print "test2 = $test2\n";
() が無いと配列の数を受け取り、() があると配列の最初の要素を得てますよね?
それと同じ考えで、正規表現のなかに () があってマッチした場合、配列が返るんで、そういった動作になります。
たぶん。 そうだと思うw
0010nobodyさん
2009/02/17(火) 11:44:43ID:???たとえば、m//のgオプションは、コンテキストで挙動が変わるとか。
0011nobodyさん
2009/02/17(火) 15:15:34ID:???処理中に進捗を表示しようとしてるのですが、普通に何パーセント終わったというのを出すと
1% finished.
2% finished.
・
・
・
100% finished.
と延々と100行も続きます。
DOS にはエスケープシーケンスというのがあり、カーソルの移動とかが出来て同じ場所に違うテキストを上書き表示をすることが出来ます。
しかし perl からエスケープシーケンスを出力しても文字化けで終わってしまいます。
ANSI.SYS を組み込めばエスケープシーケンスは有効ですが、出来る限り古い環境 (ANSI を組み込むという事は COMMAND.COM を使うことになりレガシーな環境になります)
を使わないで済むような方法はありますでしょうか?
0012nobodyさん
2009/02/17(火) 15:40:15ID:???0013nobodyさん
2009/02/17(火) 15:41:52ID:???print "\r";
print '2% finished.';
以下略 ってことね。
0014nobodyさん
2009/02/17(火) 15:45:27ID:???....5....10....15....20....25....30....35...
0015nobodyさん
2009/02/17(火) 15:52:37ID:???http://search.cpan.org/~dconway/Smart-Comments-v1.0.3/lib/Smart/Comments.pm
0016nobodyさん
2009/02/17(火) 15:56:11ID:???キャリッジリターンの存在をすっかり忘れてましたw
希望通りの動作ができました
感謝です
>>14
一旦そのやりかたも考えましたが、一度考えた表示の仕方から逃げるみたいでなんかイヤだったんですよね^^;
ありがとうございました m(_ _)m
0017nobodyさん
2009/02/17(火) 22:06:02ID:???0018nobodyさん
2009/02/17(火) 22:25:23ID:???ttp://www.mars.dti.ne.jp/~torao/program/appendix/esc.html
0019nobodyさん
2009/02/18(水) 16:50:38ID:???if($in/3 = 整数型)
上記のような事を考えていましたがperlでは整数型等の指定が出来ないみたいです。
何か方法がございましたら教えて頂けないでしょうか。よろしくお願いします。
0021nobodyさん
2009/02/18(水) 17:17:10ID:???ありがとうございました。
条件式に余剰が使えるという発想がありませんでした。
もっと色々考えないといけませんね。
0022nobodyさん
2009/02/18(水) 17:28:53ID:???0024nobodyさん
2009/02/18(水) 19:34:19ID:???0025nobodyさん
2009/02/19(木) 02:34:53ID:???考えてもわからんけどな
0026nobodyさん
2009/02/19(木) 02:40:24ID:???# if (!($hoge or $huga))
とか
# if (!($hoge and $huga))
って書いておけばいいんじゃねw
0028nobodyさん
2009/02/19(木) 13:22:08ID:X+sdAMms単純に
@a = @b;
でいいのですか?
0029nobodyさん
2009/02/19(木) 14:35:52ID:X+sdAMms書き込むファイル名を変数で変えたいのですが美味く動きません、下記のどこに問題がありますか?
$data = "data.txt";
open(OUT, "> $data");
print(OUT "$s[0]",",","$s[1]");
close(OUT);
0030nobodyさん
2009/02/19(木) 14:41:29ID:???OK だけど、a とか b だけの変数名はオススメしない
>>29
こういうデータを希望してるのに、こんなデータになってしまう
ぐらいの言葉書けないの?
バカなの?
死ぬの?
0031nobodyさん
2009/02/19(木) 14:45:02ID:???print(OUT "$s[0]",",","$s[1]");
close(OUT);
こうなるのを期待しているのですが
open(OUT, "> ");
print(OUT "$s[0]",",","$s[1]");
close(OUT);
こうなるようです。専門用語はわかりません、すみません。
0032nobodyさん
2009/02/19(木) 15:09:48ID:???ないだろ?
コピペして@sに適当な値を入れてためしに実行したけどちゃんと
data.txtになんか書かれたよ。
とりあえず一般論として:
openにはエラートラップ必須。ちゃんと書くのが
面倒でもせめて or die $! をつける
いまどき2引数openは流行らない。3引数で書こう。
0033nobodyさん
2009/02/19(木) 16:28:12ID:???our宣言が必要な場合は、
my %hoge = our %moge;
って感じで書くとエラーでないけどこういう書き方は問題ない?
our %moge;
my %hoge = %moge;
って書くべき?
003429
2009/02/19(木) 16:28:52ID:???0035nobodyさん
2009/02/19(木) 16:53:49ID:???どちらでも言語的には正しいが、俺は見易さから後者にするね。
わざわざourとか使うぐらいだからそれなりに大きいプログラム
なんだろうし。
0036nobodyさん
2009/02/19(木) 17:36:11ID:???0037nobodyさん
2009/02/19(木) 19:03:07ID:???wavファイルを繰返して再生したいのですが
#! perl
use Win32::Sound;
$file = "sound.wav";
Win32::Sound::Play( $file, SND_ASYNC, SND_LOOP);
と書きましたが、音が出ず終了してしまいました。
意図する動作をさせるための書き方を教えてください。
0038nobodyさん
2009/02/19(木) 20:24:56ID:???0039nobodyさん
2009/02/19(木) 20:45:17ID:???requireでhashだけ書き込んであるスクリプトを読み込んで、
そのhashを使おうとした時にourで宣言しないと駄目だった気がする。
いちいちデータを整形するのが面倒だから、
hashをそのまま読み込めるようにスクリプトとして直接出力して使った俺も俺だがw
サブルーチンの形で出力してrequireすれば戻り値使えてour使わず済むんじゃない?
そこまでいくと色々な意味で違う気がするがw
0043nobodyさん
2009/02/20(金) 09:00:28ID:???昔からPerlの定数は無引数のサブルーチンを使うのが普通ですよ。
constantプラグマも中身はそうなってる。
0045nobodyさん
2009/02/20(金) 15:33:35ID:vekYyWEGそういった事が起こった経験のある方いませんか?
詳しい現象は足し算を5回し50になるはずの計算値が1.02010301020104e+15という数値になります。
プログラムの記述には問題は無いはず。
(エラーの表示はでていない、足し算、引き算以外は用いていない、小数も用いていないのにエラーは少数)。
メモリーエラーとかハード面ではないかと疑っています。
0046nobodyさん
2009/02/20(金) 15:47:47ID:???0047nobodyさん
2009/02/20(金) 16:09:11ID:???0049nobodyさん
2009/02/20(金) 16:24:13ID:vekYyWEG一部分を抽出して同じエラーが出たらその部分をさらします。
0050nobodyさん
2009/02/20(金) 16:28:05ID:???0051nobodyさん
2009/02/20(金) 17:01:26ID:vekYyWEGif () {}
if () {}
を
if () {}
elsif () {}
elsif () {}
に変えたら直りました。上記だと2個の条件を同時に満たしたときにバグるようです。
下記だと同時に条件を満たしたとき先に記述された条件のほうを優先するようです。
なぜだかさっぱりわかりません。
0052nobodyさん
2009/02/20(金) 17:03:40ID:???そんなレベルの奴が書いた300行のスクリプト…
0053nobodyさん
2009/02/20(金) 17:18:50ID:???for next などの繰り返し処理や
サブルーチンの使い方などが良くわからないのでやたら長くなりました
ちなみに賞味300行なので空行を入れて印刷すると15ページになりました。
連動する別のファイルのスクリプトをあわせると30ページ以上になりました。
やっぱりサブルーチンは覚えるべきだとおもいました。
0055nobodyさん
2009/02/20(金) 17:34:37ID:???こういう自信って何処から来るんだろう。
0056nobodyさん
2009/02/20(金) 17:45:10ID:???0058nobodyさん
2009/02/20(金) 17:53:27ID:???てめぇは本をまず買えよw
if () {}
elsif () {}
else {}
は
もし 〜 なら {}
そうではなくて、もし 〜 なら {}
そうでなけりゃ {}
ってなって、1つでも TRUE となれば他は評価されません。
if ばかり並べると全てが評価されます。
0059nobodyさん
2009/02/20(金) 18:36:53ID:???を思い出した。
0060nobodyさん
2009/02/20(金) 18:37:19ID:???0061nobodyさん
2009/02/20(金) 18:42:56ID:???「はじめてのperl」 など、サンプルが載ってるもの
ポケットリファレンス
の2冊を同時に買うように進めてる
ネット見りゃ済むって思うだろうけど、それはよほどやる気の有る奴か
なんでもかんでもググりたいようなやつとか、そういう人種にしか出来ないw
やっぱ始めのうちは 「紙で読むこと」 が重要だと思う
0063nobodyさん
2009/02/20(金) 18:51:29ID:???答えを期待しない質問とか、for next とか、本が難しいとか
真剣さがいささかも感じられませんね。
0064nobodyさん
2009/02/20(金) 19:09:45ID:???1つの質問に対する回答が、質問者しか助けないと思ったら間違いだ
0065nobodyさん
2009/02/20(金) 19:41:50ID:???0067nobodyさん
2009/02/20(金) 22:55:29ID:fozUBJJ4数字だけのチェックであれば
if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ}
とすればよいのですが、例えば
$data=19,800.05
というようにカンマとピリオドが入っていても良いとする場合簡潔な書き方はありますでしょうか?
現在以下のように書いております。
$data =~ s/\,//g;
$data =~ s/\.//g;
if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ}
どなたか宜しくお願い致します。
0068nobodyさん
2009/02/20(金) 22:58:19ID:???0069nobodyさん
2009/02/20(金) 23:04:44ID:???#数字,.のみ
}else{
#それ以外もあるよ
}
じゃダメなのかな?
0070nobodyさん
2009/02/20(金) 23:09:49ID:???0071nobodyさん
2009/02/20(金) 23:18:50ID:???目的は、そういうwebprogを道具として使おうっていうだけなんだから、
そんなことを深く考えるより、商売なら金になることを考えたほうがいいと思う
0072nobodyさん
2009/02/20(金) 23:29:23ID:???0073nobodyさん
2009/02/20(金) 23:29:29ID:???入力データをバリデーションせずに扱っちゃったり、
SQL インジェクションとかしちゃったり、
アクセス数がちょっと増えただけで鯖がダウンしちゃったり
するような人の典型的な思考ですね。
> 商売なら金になることを考えたほうがいいと思う
金のなる木になるどころか、負け犬になりますよw
0076nobodyさん
2009/02/21(土) 00:19:11ID:???0077nobodyさん
2009/02/21(土) 01:47:16ID:???if ($data =~ m/^(?:0|(?:[1-9]\d{0,2}(?:,\d\d\d)*))(?:\.\d+)?$/){
...
} else {
...
}
とりあえず、こんなでも良いんじゃないか。
if ($data =~ m/^\d[\d,]*(?:\.\d+)?$/){
0078nobodyさん
2009/02/21(土) 03:59:22ID:???0079nobodyさん
2009/02/21(土) 04:00:47ID:???商売ならなおのこと気を遣うべきで、
それがわからんなら線抜いて寝ちまえ、ってことだな
0081nobodyさん
2009/02/21(土) 04:40:34ID:???子クラスのインスタンスから親クラスのメソッドはどうしたら呼べますか?
0082nobodyさん
2009/02/21(土) 05:09:33ID:???質問内容が今ひとつ分からない。
package Parent;
sub new {
my ($proto) = @_;
my $class = ref($proto) || $proto;
return bless { greeting => 'hello' }, $class;
}
package Child;
use base qw(Parent);
sub new { $_[0]->SUPER::new }
package main;
use Data::Dumper;
print Dumper(Child->new); # new
print Dumper(Child->new->new); # clone
0083nobodyさん
2009/02/21(土) 05:32:46ID:???メソッドが実装されていなければ、親のクラスを辿って実行するよ。
package Parent;
sub new { bless { greeting => 'hello' }, $_[0] }
sub greeting { return $_[0]->{greeting} }
package Child;
use base qw(Parent);
package main;
print Child->new->greeting, "\n"; # Parentのメソッドが呼ばれる
0084nobodyさん
2009/02/21(土) 08:40:32ID:???具体例を出すべきでしたね、すみません。
package Parent;
sub new { bless {},shift }
sub whoami { print "parent\n" }
package Child;
use base 'Parent';
sub whoami { print "child\n" }
package main;
my $obj = Child->new;
$obj->whoami; # child
$obj->SUPER::whoami; # エラー。"parent\n"を出してほしい
0085nobodyさん
2009/02/21(土) 08:42:04ID:???上記のように、Childクラスでオーバーライドしたメソッドがあるとき、スーパークラスのメソッドを呼びたいのです。
0086nobodyさん
2009/02/21(土) 08:43:10ID:???0087nobodyさん
2009/02/21(土) 10:14:01ID:???プログラムの実行中に同じスカラー変数のリファレンスであるにも関わらず値が変わってしまいます。
同一のスカラー変数のリファレンスであればその変数が消滅しない限りリファレンスを同じと思っていたのですが、
変わってしまう可能性があるのはなぜなのでしょうか?
知ってる方がいたら教えてください。
0088nobodyさん
2009/02/21(土) 10:57:17ID:???とりあえずソースコード晒せ。
0089nobodyさん
2009/02/21(土) 13:06:29ID:???すみません、レスしようと思って書き始めて気がつきましたが、
完全に自分の勘違いでリファレンスの値は変わっていませんでした。
リファレンスが不変となると、さらに別の疑問が。。
インサイドアウトオブジェクトを使用するときに、identを使う意味がなくなるように思うのですがどうなんでしょうか?
(例)
use Class::Std::Utils;
{
my %value_of;
sub new {
my($class, $opt) = @_;
my $obj = bless \do{my $anon_scalar}, $class;
return $obj;
}
sub set_value {
my($self, $value) = @_;
$value_of{ident $self} = $value; <===ここの ident を消しても動く。
return;
}
・
・
}
この中でidentを削除しても普通に動いてしまいます。
リファレンスが不変なら、なぜわざわざidentで一意の値を取得する必要がわかりません。
0090nobodyさん
2009/02/21(土) 13:08:00ID:???としたときに、呼び出し先のある関数に huga というエイリアスを張ろうとしています
ですが、どうやら importer が自動で起動しないようです
hoge.pm の &importer が呼び出されないことってあるんでしょうか?
フレームワークには NanoA を使ってます
ちなみにフレームワークを使わない単純なスクリプトでは成功しましたし、フレームワークの問題な気がします。
もし使えないことがあるなら代替方法を考えたいです
use で渡された引数を受け取る手段って他にないんでしょうか?
009190
2009/02/21(土) 14:31:01ID:???プログラムのほうはちゃんとそうなってました
0092nobodyさん
2009/02/21(土) 14:34:37ID:???そういうのは考えたことが無かったな。
SUPER.pm使うぐらいしか思いつかない。
package main;
use SUPER;
my $obj = Child->new;
$obj->whoami; # child
$obj->super('whoami')->();
>>89
ユニークな値ならなんでもよし。
0093nobodyさん
2009/02/21(土) 15:01:05ID:???SUPERはカレントパッケージの@ISAから探そうとする
Can't locate object method "whoami" via package "main" at ./tmp.pl line 19.
と言われるようにカレントパッケージがmainなのでwhoamiは見つからない
0094nobodyさん
2009/02/21(土) 18:31:27ID:???同じ名前で呼び出すことにこだわるなら、必要なときに分岐できるように
ChildのCをさらにオーバーライドすると思う。
それか、別名で定義するか
0095nobodyさん
2009/02/21(土) 18:32:52ID:???0096nobodyさん
2009/02/21(土) 18:34:39ID:???オブジェクトをハッシュにキーにしてはいけないと聞いたことがある。
何故かはしらね
オーバーロードしてるよきに困るからじゃないか?
0097nobodyさん
2009/02/21(土) 20:18:48ID:???PersonをインターフェイスにしてChildに多重継承させてもいいけど、
ちょっとゴチャつきそう。
package Person;
sub new {
my $class = shift;
return bless { @_ }, $class;
}
sub whoami {}
package Parent;
use base 'Person';
sub whoami { print "parent\n" }
package Child;
use base 'Person';
sub new {
my ($class, $parent) = @_;
return $class->SUPER::new(parent => $parent);
}
sub whoami { print "child\n" }
sub parent { shift->{parent} }
package main;
my $parent = Parent->new;
my $obj = Child->new($parent);
$obj->whoami; # child
$obj->parent->whoami; # parent
0098nobodyさん
2009/02/21(土) 20:31:17ID:???そういう形になりますか、ありがとうございます。
オーバーライドしたとき、元のメソッドを呼びたいときっていうのは、珍しいことでしょうか?
0099nobodyさん
2009/02/21(土) 20:53:13ID:???010090
2009/02/21(土) 21:01:21ID:???ファイルが
lib/haga/hoge.pm
で、パッケージ宣言が
package hoge;
となっており、呼び出し元からは
use haga::hoge
と指定されていました
パッケージ宣言を
package haga::hoge;
と直すと全てうまくいきました
しかし不思議なのは、パッケージ自体は使えたことですね
import関数だけが呼ばれないようでした
0101nobodyさん
2009/02/22(日) 14:43:56ID:???・ package NAME の実体はシンボルテーブルを表現するグローバルハッシュのキー
・ use NAME は本質的にはファイル名
この2つが一致するようにしておくのが慣習になっており(そうでもしないと発狂するので)、ほとんどのプログラムはそれを前提として書かれている。
use haga::hoge; は lib/haga/hoge.pm を見ており、import は package 宣言と同じ名前空間を見ている。
それは前述のようにハッシュなので、キーが見つからなければ黙って *自動生成* される。
use は正しいファイルを読み込み、package は指示された名前空間を設定し、内部的に import は仕様通り仕事を果たしており、問題は発生していないためエラーの類は出ない。
結論: あんまり不思議じゃありませんでした。
0103nobodyさん
2009/02/24(火) 03:40:08ID:???"cover_db: No such file or directory at ..."で死にます
似たような症状が出た人っていますか?
0104nobodyさん
2009/02/24(火) 10:37:41ID:???0105nobodyさん
2009/02/26(木) 21:12:44ID:???0106nobodyさん
2009/02/27(金) 02:14:12ID:???0107nobodyさん
2009/02/27(金) 21:23:42ID:???> 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか
Catalyst とか Sledge とかをインストールする場合とかどんなですか。
0108nobodyさん
2009/02/28(土) 21:24:49ID:???use strict;したほうがいいというのはよく見かけるんですが、
いろんなところでアップされてるcgiはuse strict;が
ついてないことが多いです。これはどうしてでしょうか。
0109nobodyさん
2009/02/28(土) 21:48:56ID:???最近ではuse strictしてないコードはマジキチ
あとさ、アルファベットは半角使おうぜ
0112nobodyさん
2009/02/28(土) 23:26:30ID:???糞ソースだから、君ははじめから strict 付きで開発出来ないんだよね。
がんばれよ
>>108
strict 付きで動かなかったり、warnning 出るスクリプトは糞です。
過剰表現ではなくて。
0113nobodyさん
2009/03/01(日) 00:40:14ID:???0114偽者
2009/03/01(日) 00:53:45ID:???JAPU
0115nobodyさん
2009/03/01(日) 01:21:33ID:???君が見てる「いろんなところのcgi」とやらは例外なくゴミだから。
0116nobodyさん
2009/03/01(日) 02:49:23ID:???0117nobodyさん
2009/03/01(日) 03:00:05ID:???http://perldoc.jp/docs/perl/5.8.8/perlmod.pod
begin end check init block perl 辺りで。
PODをgrepした方が速いけどね。
0118nobodyさん
2009/03/01(日) 03:21:26ID:???その前に、初めてのPerlと続・初めてのPerlを読んだ方が良いかな。
0119nobodyさん
2009/03/01(日) 16:15:08ID:???CPANでstrict, warnings使ってないじゃないか、
という揚げ足取りをされないために、念のため補足
0120nobodyさん
2009/03/01(日) 16:27:40ID:???システム開発を本職でやってる人たちって、やっぱオブジェクトつくるときMooseつかってる人多いの?
俺は仕事の補助的にperl使ってるだけで、今はスカラをblessして使ってるけどMooseに切り替えて見ようかなとか検討中。
0121nobodyさん
2009/03/01(日) 16:50:17ID:???けっこうしっかりとMooseについて纏められているよ
0122nobodyさん
2009/03/01(日) 17:20:11ID:???0123nobodyさん
2009/03/01(日) 17:20:33ID:???情報サンクス。
近くにその本置いてそうな本屋がないくらいど田舎なんで、
モダンPerl入門を森林組合に注文してみた。
0124nobodyさん
2009/03/01(日) 17:50:25ID:???Moose自体は2006年頃に初登場だから
比較的新しくてたぶん他にはないんじゃないかな
ブログとかにも情報なくはないよ
0125nobodyさん
2009/03/02(月) 00:11:21ID:???CGI.pmでクエリキーは得られるが値がundefになる。誰か助けて。
use strict;
use warnings;
use CGI;
my $query = new CGI->new();
my @params = $query->param();
print ''.$ARGV[0]."\n";
for my $key (@params)
{
print $key. "=";
print $query->{$key} || '';
}
$ perl cgitest.pl hoge=moge
hoge=moge
hoge=
環境はActivePerl 5.10.0/CGI.pm 3.41です。
0126nobodyさん
2009/03/02(月) 00:15:02ID:???こんな書き方初めて見たお(´・ω・‘)
0127nobodyさん
2009/03/02(月) 00:31:20ID:???perldoc CGI;
すれば一瞬で解るようなことなんだが。
まあ、取り敢えず$query->param($key)して落ち着け。
ハッシュで得たいならmy %query = $query->Vars();しとけ。
0128nobodyさん
2009/03/02(月) 00:31:51ID:???0129nobodyさん
2009/03/02(月) 00:35:54ID:???Moouse/Mouseもハッシュベースじゃないオブジェクトは
(無理じゃないけど)アレだよ。
どうしても必要があるとき以外は、俺はハッシュベースにしてる。
で、Moose/Mouseだけど、OOにするのと同様に、
或る程度以上の規模のプロジェクトならありがたみが増すけど、
そうでなくて、かつ、現状で満足できているなら、
無理に使わなくても十分やってけると思う。
まあ、one liner用のooseとかもあるくらいだから、
ちっこいプロジェクトでも使いではあるけどね。
0130nobodyさん
2009/03/02(月) 00:38:03ID:???こう解釈されるのか。
案外普通だ。
0131nobodyさん
2009/03/02(月) 00:57:22ID:???がーん、俺の使い方が間違ってたのか。
後付けになるけど今までActivePerl 5.6/CGI.pm 3.04を使っていて、>>125の書きかたでも通ってたんだ。
今までに作ったスクリプトは全部書き直しだなぁ。
どうもありがとうです。
0132nobodyさん
2009/03/02(月) 03:09:00ID:???ハッシュレフとアクセサが分かって無かったんだろうな。
> my $query = new CGI->new();
CGIがDamianの言ってることガン無視で組んでたからたまたま動いてると。
my $src_regex = qr/((\n\s+)var1\s=[^;]+;.*)\n/;
my $dest = "\$1\$2varp = 5;\n";
$input =~ s/$src_regex/$dest/sg;
$1,$2を変数の中に入れると置換されないのは 仕様?
0134nobodyさん
2009/03/02(月) 22:12:50ID:???0135nobodyさん
2009/03/02(月) 22:46:57ID:???今ひとつ掴めないが。
my $dest = q{"$1$2varp = 5;\n"};
$input =~ s/$src_regex/$dest/sgee;
Evalするとエラ〜になりまつ
Scalar found where operator expected at (eval 1) line 1, near "$1$2"
(Missing operator before $2?)
Bareword found where operator expected at (eval 1) line 1, near "$2varp"
(Missing operator before varp?)
Use of uninitialized value in substitution iterator at ./s.pl line 15.
早とちりしてた。 動きました。 なんで?
0138nobodyさん
2009/03/02(月) 23:05:28ID:jCf+CacPぜろちゃんねるのスクリプトを使用した掲示板を設置し、
test070124 ttp://0ch.mine.nu/public/scripts/
そこにアップローダを備えて誰でも過去ログをアップすることが出来る板を
設置しようと考えました。ただアップするだけではなくインデックスも更新できる
ような仕様を目指しました。
2: それでこんな風にやってみたが・・・
それで無事に掲示板とphpのロダも設置し、問題なく動作。
インデックスを更新するには管理者がログインして更新しなければならず、
アップした人が外部からインデックスを更新できるように
remake.cgi ttp://a1or4qsl6.hp.infoseek.co.jp/okiba/index.html
というものを使いました。
3: こんなエラーが出て上手く行かなかった。
しかし、ローカルではすんなりとロダで上げる、インデックスの更新も
問題なかったのですが、鯖でやるとレス番がズレるという問題が発生しました。
パーミッションの設定もいろいろイジったのですがどうしてもレス番
がズレ、繰り返すうちに板全体がおかしくなるのです(あるはずのないスレが発生など)。
なにが問題なのかよいアドバイスをよろしくお願いします。
0139nobodyさん
2009/03/02(月) 23:48:16ID:???/sgee; のeは一個でeval()一個と同等。
$destの中身をevalを使って評価してる。
my $dest = q{"$1$2varp = 5;\n"};
$input =~ s/$src_regex/eval $dest/sge;
0140nobodyさん
2009/03/03(火) 00:09:40ID:???$foo = q(huh?);
$foo =~ s/huh\?/die(q(huh))/e;
if ($@) {print q(died)}
0141nobodyさん
2009/03/03(火) 00:10:50ID:???0142nobodyさん
2009/03/03(火) 00:53:19ID:???期待してるのはこう?
my $foo = q(huh?);
$foo =~ s/huh\?/"die(q(huh))"/ee;
if ($@){ print q(died) }
eval()って書いたのは、eval EXPRを示したかっただけだから突っ込まないでくれ。
eval BLOCKとは異なることを言いたかった。
0143nobodyさん
2009/03/03(火) 01:26:39ID:???そうそう。
2個目のeからeval EXPRで外側を囲まれる感じとでも理解しておけばいいのかな?
どうもありがとう。
0144nobodyさん
2009/03/03(火) 13:34:16ID:YRhfBR/oプログラムが動かなくなってしまいました。思い当たる節としてはport でgnuplotを入れた際に
偉い時間がかかったのでそのときに何か変更されたのではと思っています。
perl -le 'print for @INC'
/sw/lib/perl5
/sw/lib/perl5/darwin
/opt/local/lib/perl5/5.8.8/darwin-2level
/opt/local/lib/perl5/5.8.8
/opt/local/lib/perl5/site_perl/5.8.8/darwin-2level
/opt/local/lib/perl5/site_perl/5.8.8
/opt/local/lib/perl5/site_perl
/opt/local/lib/perl5/vendor_perl/5.8.8/darwin-2level
/opt/local/lib/perl5/vendor_perl/5.8.8
/opt/local/lib/perl5/vendor_perl
.
現在このようになっており、/Library/Perl/5.8.8などがサーチパスから外されています。
@INCを定義しているファイルってどこにあるんでしょうか。
もう、困るなあ。。
0145nobodyさん
2009/03/03(火) 13:39:15ID:???2chに書き込むと解決する法則が発動したな。
she-bangで#!/usr/bin/env perlとしていたため、/usr/bin/perlではなく/opt/local/bin/perlが使われていました。
ナンタルチーヤ!
勝手にパールいれんな。
0146nobodyさん
2009/03/03(火) 13:47:20ID:???こういう書き方がそもそも悪い
てゆか、ソースコードは1行独立で書こうよ。
文中に含まれると可読性悪い。
0147nobodyさん
2009/03/03(火) 19:13:25ID:???静的なHTMLファイルのフォームから、cgiを叩いて、次のページを表示させるという、
至って普通なことをしているのですが、IEだと正しくHTMLが解釈されてページが表示されるものの、
operaとFirefoxでは、plaintextとして、ソースが表示されてしまいます。
cgiにお約束の一文も入れてから、HTMLを吐いています。
print "Content-type: text/html\n\n";
ヘッダの最初はこんな感じです。文字コードも間違いなくeucで出力されていることも確認しました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<meta http-equiv="cache-control" content="no-cache">
…
</head>
<body>…</body>
</html>
operaとFirefoxでソースを保存しようとすると、なぜか表示されているtextではなく、cgiを叩いて失敗した
画面のソースが保存されてしまうため、仕方なく、表示されるtextをそのままコピペで.htmlで保存して、
operaとFirefoxで開いてみると、HTMLは正しく解釈されて表示されています。
なにかヒントになりそうなことがあれば、ご教示願います。
0148nobodyさん
2009/03/03(火) 19:25:29ID:???0149147
2009/03/03(火) 19:29:13ID:???以前に書いたソースなので、自分でもよく覚えていないのですがw
print "Content-type: text/html\n\n";
の前に、printで出力している部分がありました…(デバッグ用だったのかなあ…)
0151nobodyさん
2009/03/03(火) 19:32:23ID:x3eHsIxdif ($tensuua < 10) {$ranka = 3;} elsif (tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif (tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
------------------------------------------------------------------------------------------
if ($tensuua < 10) {$ranka = 3;} elsif (tensuua < 20) {$ranka = 2;} elsif (tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif (tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
0152147
2009/03/03(火) 19:33:00ID:???それで気がつきますよね。
何故か、print "Content-type: text/html\n\n";の前に、出力している部分は
opera、FFで確認できなかったので、telnetで確認すべきでした。
というか、これは500エラーにならないんだろうか…
0154nobodyさん
2009/03/04(水) 01:10:40ID:???0155訂正
2009/03/04(水) 06:49:37ID:+iuw4LCF点数でランク分けする処理を2つ行いたいのですが($tensuuaと$tensuubの数値によってそれぞれに対応する$rankaと$rankbの中身を書き換える)以下の2通りの書き方のうち
どちらが正しいのでしょう? 以前にif→elsifとせずif→ifを並べたらバグって変数内の数値が出鱈目になったことがありました、そのときは2つ以上の条件を同時に満たした上、
書き換えられる変数が同じ名前でした。今回、上のソースだとif→ifと同じように間違っているのか、変数が違うから問題ないのかがわかりません。
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
------------------------------------------------------------------------------------------
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
0156nobodyさん
2009/03/04(水) 07:13:20ID:???elsif ○○ではなくて××ならば
elsif さらに××でもなくて△△ならば
というだけの話なのだが
0157nobodyさん
2009/03/04(水) 07:46:56ID:+iuw4LCFif ( $a > 10 ){なんか処理}
if ( $a > 20 ){なんか処理}
if ( $a > 30 ){なんか処理}
コレだと$aに30以上が入力されるとバグります
10 if a>10 then なんか処理
20 if a>10 then なんか処理
30 if a>10 then なんか処理
ベーシックだと順に処理されて行番号30の処理が優先されたと思います。
0158nobodyさん
2009/03/04(水) 08:01:49ID:???30以上が入力されるとバグりますって、例えば$aが40だったら$a > 10は満たされるからそこが実行されるに決まってるだろうがよ。
0159nobodyさん
2009/03/04(水) 08:04:26ID:???if ( $a > 10 ){なんか処理}
if ( $a > 20 ){なんか処理}
if ( $a > 30 ){なんか処理}
お前さんの例で言うなら、例えば$aが40だったら「なんか処理」は三つとも実行される。
0160nobodyさん
2009/03/04(水) 10:14:27ID:???elsif(10以上20未満){処理}
else{処理}
0161nobodyさん
2009/03/04(水) 10:20:20ID:???大きい順に評価して if を並べりゃいいじゃない
0162nobodyさん
2009/03/04(水) 10:26:43ID:???0163nobodyさん
2009/03/04(水) 12:01:34ID:+iuw4LCF現在はすべてifでかかれているので正常に動作しません。
もし上でもよければ修正が容易なのですが下のようにしなければならないのならifが100個ぐらいあるのでフローチャートでも書かないとむりかなと思ってます。
ソースその1
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
------------------------------------------------------------------------------------------
ソースその2
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
0164nobodyさん
2009/03/04(水) 12:04:07ID:???0167nobodyさん
2009/03/04(水) 13:18:26ID:???何が要求仕様なのかもう一度整理しろ
んで、仮にこういうデータが来たらどう処理されるなってのを考えろ
0168nobodyさん
2009/03/04(水) 14:37:04ID:???ソースその1で動作環境はウェブサーバーで仮に$tensuua=20と$tensuub=20が同時に入力された場合 if→ifの場合のエラーと同じ不具合がおこりえるのかどうか
教えてください。
ソースその1
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub > 10 and $tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
------------------------------------------------------------------------------------------
ソースその2
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;}
elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub > 10 and $tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
0169nobodyさん
2009/03/04(水) 15:04:49ID:???0170nobodyさん
2009/03/04(水) 15:47:05ID:???my ($tensuua, $tensuub) = (15, 15);
my ($ranka, $rankb);
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
print "a:$ranka b:$rankb\n";
これを実行すると、
a:2 b:2
こうなるわけだが、何か問題があるのか?
0171nobodyさん
2009/03/04(水) 16:28:04ID:???俺らはエスパーじゃねーんだよクソッタレ
0172nobodyさん
2009/03/04(水) 16:43:38ID:???my $rankA = -1;
my $rankB = -1;
my $pointA = 5;
my $pointB = 56;
my @pointlist = qw/30 20 10/;
my @ranklist = qw/1 2 3/;
for(my $i = 0; $i < $#pointlist + 1; $i++){
$rankA = $ranklist[$i] if $pointA < $pointlist[$i];
$rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}
print "point = $pointA / rank = $rankA\n";
print "point = $pointB / rank = $rankB\n";
0173nobodyさん
2009/03/04(水) 16:45:26ID:???use strict;
my $rankA = -1;
my $rankB = -1;
my @pointlist = qw/30 20 10/;
my @ranklist = qw/1 2 3/;
# 上記までは変更しない
# 下の pointX を変更して動作を確かめてください
my $pointA = 5;
my $pointB = 56;
for(my $i = 0; $i < $#pointlist + 1; $i++){
$rankA = $ranklist[$i] if $pointA < $pointlist[$i];
$rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}
print "point = $pointA / rank = $rankA\n";
print "point = $pointB / rank = $rankB\n";
0174nobodyさん
2009/03/04(水) 16:47:31ID:???$rankA = $ranklist[$i] if $pointA < $pointlist[$i];
$rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}
の方がすっきりしない?
0175nobodyさん
2009/03/04(水) 17:20:03ID:bLGM+Am6ローカルホストで簡易掲示板を作りあるページで $_SERVER["REQUEST_URI"] とやると
127.0.0.1/hoge/bbs/
鯖にあげてローカルホストでやった場所と同じところで $_SERVER["REQUEST_URI"] とやると
127.0.0.1/hoge/bbs/php/ となるのはなぜ?
問題はないんだけど後学のために教えてください。
phpは つい1週間前に入れたばかりで httpd でのテストです。
0177nobodyさん
2009/03/04(水) 19:02:40ID:???0178nobodyさん
2009/03/04(水) 19:03:16ID:???$rankA = $ranklist[$i] if $pointA < $pointlist[$i];
$rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}
0179nobodyさん
2009/03/04(水) 19:08:07ID:+iuw4LCF>>51 でも書いたように
if () {}
if () {}
if () {}
を
if () {}
elsif () {}
elsif () {}
にすると直る。
バグの症状は変数の数値が壊れる。この不具合が起こったプログラムは修正済みで不具合時のソースは見当たらず。
不具合時の環境はlolipopレンタルサーバーでブラウザーから呼び出したとき。
現在は直した部分以外の変数が壊れる現象があり、プログラムには100個程度のifが使われていることから、前回と
同じ理屈で不具合が起きているのではないかと推測。
if () {}
elsif () {}
else {}
を2個組み合わせてもifまたはelsifの2個以上が同時に真になったときに同じ現象が起きたのではないのかと推測
その推測を元に質問いたしましたが、文書力が無いので伝わらず。これはもうあきらめるしかないっぽい、外注に
出します、色々とありがとうございました。
この質問とレスの番号の全て→ >>45-66 >>151 >>153 >>155-174 >>176-178
0180nobodyさん
2009/03/04(水) 19:23:02ID:???お前プログラム勉強する気あるのか?
ifとelsifの違いは>>156に書いてあるだろ
if(){}
elsif(){}
else{}
実行されるのはどれか1つだ
if(){}
if(){}
if(){}
実行されるのは0-3個のどれか
0181nobodyさん
2009/03/04(水) 19:25:37ID:???こんだけ世界中で使われてるものの不具合がお前ごときに見つけられるわけがねーだろ
0182nobodyさん
2009/03/04(水) 19:32:56ID:???氏ねよ
0184nobodyさん
2009/03/04(水) 19:41:31ID:???0185nobodyさん
2009/03/04(水) 19:55:41ID:???0186nobodyさん
2009/03/04(水) 20:00:39ID:???まー「外注に依頼」という正解にたどり着いたのはいいことだ。
0187nobodyさん
2009/03/04(水) 20:13:55ID:???共用鯖で実験ならいつもやってますw
無限ループやらかして、何度自分でプロセス切った事やらw
0188nobodyさん
2009/03/04(水) 22:04:05ID:???そういう設定が普通だと思ってた
0189nobodyさん
2009/03/04(水) 23:45:41ID:4H3lqSU+含まれていたときはスルーし、最後に実行させたいのですが。
こんな感じのときです
対象 hogehoge
検索 geh
含まれていたら print "NO";
含まれていなかったら他の条件へ。
0190nobodyさん
2009/03/04(水) 23:53:18ID:???ここがよくわからない
if ( $str =~ /geh/ ){
print "NO";
}else{
#他の条件
}
0191nobodyさん
2009/03/04(水) 23:53:35ID:???my $search = 'geh';
if($str =~ /$search/){
print "NO\n";
}else{
....
}
0192nobodyさん
2009/03/04(水) 23:53:59ID:???0194nobodyさん
2009/03/05(木) 00:09:14ID:PCYMuwfz含まれていないときに終了させ、含まれている時にはスルーすることをしたいのですが。
$str = 'hogehoge';
if ( length($str) ne '8' ) {
print "no";
}
elsif {
geh が含まれていないとき
print "no";
}
elsif {
他の条件1
print "no";
}
elsif {
他の条件2
print "no";
}
else {
実行
print "oK";
}
こういうことです。
0195nobodyさん
2009/03/05(木) 00:16:13ID:???処理が逆なら真偽ひっくり返したらいいだけ
0196nobodyさん
2009/03/05(木) 00:26:06ID:PCYMuwfz>含まれていたら print "NO"って書いてたやん
間違えていました。正しくは含まれていないときに実行したいのです。
真偽をひっくり返すとは?
0197nobodyさん
2009/03/05(木) 00:28:58ID:???0198nobodyさん
2009/03/05(木) 00:41:15ID:PCYMuwfz$str = hogehoge;
if ( $str != ~/geh/) {
print "NO";
}
0200nobodyさん
2009/03/05(木) 00:49:56ID:???〜処理〜
}
!~ は 一致したときに偽となります。
なので、!~ で一致しなければ真となります。
0202nobodyさん
2009/03/05(木) 02:37:44ID:???あれってどうやっているんですか?2つcgiを用意するのか
もしくは1つでやっているんでしょうか?
0203nobodyさん
2009/03/05(木) 02:41:58ID:???0204nobodyさん
2009/03/05(木) 06:51:21ID:???原因を調べてみた結果「ー」がその原因だったことが判明しました。
ソースはこんな感じなんですがどうすればエラーが出ないようになるでしょうか?
if( $NG =~ m/$subject/) {
print '禁止ワードです';
}
文字コードはShift-JISでj-code.plなどは使用していません。よろしくお願いします。
0205nobodyさん
2009/03/05(木) 08:28:19ID:???0206nobodyさん
2009/03/05(木) 08:36:47ID:???そんなやり方があるんですね。ありがとうございます。
軽くググってましたが \Q***\E を使うといいらしいですが\Eで閉じる必要はないのでしょうか?
0207nobodyさん
2009/03/05(木) 08:39:30ID:???クウォートメタの効果を途中で止めたいなら\Eで閉じなきゃいけないけどこの場合はないから閉じなくてもいい
0209nobodyさん
2009/03/05(木) 08:58:56ID:???/\Q$subject[a-z]\d/みたいにクウォートメタしたいものの後に正規表現使う場合には
/\Q$subject\E[a-z]\d/こう書かいて閉じておかないと、パターンマッチではなく
$subjectの内容直後に"[a-z]\d"という文字があるときしかマッチしなくなるということ
0210179
2009/03/05(木) 16:49:09ID:9GnY8N9BIFの使い方に特化した本ありませんか?
0211nobodyさん
2009/03/05(木) 16:56:24ID:???0213nobodyさん
2009/03/05(木) 16:59:45ID:???どうぞ
0214nobodyさん
2009/03/05(木) 17:05:25ID:???0215nobodyさん
2009/03/05(木) 17:06:52ID:???http://www.amazon.co.jp/gp/product/images/B001QWUZ9W/ref=dp_image_0?ie=UTF8&n=465392&s=books
0216nobodyさん
2009/03/05(木) 17:08:19ID:???キミは
英語を勉強しようとして、「if」 しか解説してない本を探せると思うか?
日本語を勉強しようとして 「あ行」 しか解説してない本を探せると思うか?
0217nobodyさん
2009/03/05(木) 17:09:07ID:???こういったリンクの方がうれしい
0218nobodyさん
2009/03/05(木) 17:26:32ID:???0219nobodyさん
2009/03/05(木) 17:50:16ID:???0220nobodyさん
2009/03/05(木) 17:58:01ID:???それ見て勉強するか100万払うこったな
面倒くさいからもう来んな
0221nobodyさん
2009/03/05(木) 19:52:11ID:???創刊号は演算子優先順位一覧表がついて、590円!
0222nobodyさん
2009/03/05(木) 19:52:52ID:???ネタじゃないなら、もうソースも恥部もさらけ出せよ
0223nobodyさん
2009/03/05(木) 20:40:48ID:???0224nobodyさん
2009/03/05(木) 20:43:15ID:???0225nobodyさん
2009/03/05(木) 20:53:49ID:???0227nobodyさん
2009/03/06(金) 00:19:12ID:???if文を100個も並べるようなコードは、おそらくif文などほとんど使わずに書けると思うよ。
コード以前に、仕様定義を日本語で整理することに頭と時間使った方が結局近道。
どういう処理をさせたいか日本語で表せない(他人に伝えられない)のにコーディングできるはずがない。
例えば
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
のコードは、$tensuua == 10 のとき、意図しない結果となると思う。
条件式は、混乱するんだったら、表を書いてでも整理すべし。
0228nobodyさん
2009/03/06(金) 00:29:04ID:???0229nobodyさん
2009/03/06(金) 01:14:19ID:???0230nobodyさん
2009/03/06(金) 01:57:58ID:???NCNRでお願いします。
0231nobodyさん
2009/03/06(金) 05:12:13ID:???3万でいいよ
0232nobodyさん
2009/03/06(金) 13:15:46ID:???制作は規模にもよるけど3ヶ月以内を約束で。
0233nobodyさん
2009/03/06(金) 14:24:55ID:???なんかのフレームワークかな?とか。
……俺だけ?
0235nobodyさん
2009/03/06(金) 18:09:13ID:???0236nobodyさん
2009/03/06(金) 22:21:27ID:???創刊号 ifブロック特集
第2号 elseブロック特集
第3号 elsifブロック特集
第4号 unlessブロック特集
第5号 whileブロック特集
第6号 untileブロック特集
第7号 forブロック特集
第8号 if修飾詞特集
第9号 unless修飾詞特集
第10号 while修飾詞特集
第11号 until修飾詞特集
第12号 for修飾詞特集
第13号 if演算子(?:)特集
第14号 範囲演算子(..)特集
第15号 範囲演算子(...)特集
第16号 論理積演算子(&&)特集
第17号 論理和演算子(||)特集
第18号 論理積演算子(and)特集
第19号 論理和演算子(or)特集
第20号 排他的論理和演算子(xor)特集
第21号 grep関数特集
第22号 evalブロック特集
第23号 Switchモジュール特集
最終号 はじめてのPerlプログラミング
0237nobodyさん
2009/03/06(金) 23:18:44ID:???if の歴史
からいこうぜ
0238nobodyさん
2009/03/06(金) 23:27:43ID:???0239nobodyさん
2009/03/06(金) 23:36:05ID:???0240nobodyさん
2009/03/07(土) 00:03:23ID:???まともにやってたら中級の入り口に立ってるはずなのにw
0241nobodyさん
2009/03/07(土) 02:52:57ID:???0242nobodyさん
2009/03/07(土) 02:58:51ID:???むしろツッコミどころは第23号じゃね?
0243nobodyさん
2009/03/07(土) 14:31:06ID:???0245nobodyさん
2009/03/07(土) 15:05:38ID:???0246nobodyさん
2009/03/07(土) 18:31:27ID:???0248nobodyさん
2009/03/08(日) 01:43:51ID:???0249nobodyさん
2009/03/08(日) 11:38:53ID:???0251nobodyさん
2009/03/08(日) 21:55:46ID:???あの辺のクラスタは10年経ってもずっとやってそう
0252nobodyさん
2009/03/08(日) 22:16:42ID:???0255nobodyさん
2009/03/09(月) 01:19:00ID:???$hogeがaとb以外のときに実行するには
if ($hoge ne 'a' or $hoge ne 'b' ){
print "oik";
}
で合ってますか?
0256nobodyさん
2009/03/09(月) 01:26:29ID:???その場合だと、「a以外」または「b以外」のときに真となるので、常に成立することになる。
「aまたはb」という条件式を作り、それをさらに否定するといい。
0257nobodyさん
2009/03/09(月) 01:27:09ID:???0258nobodyさん
2009/03/09(月) 01:28:42ID:???orじゃなくて、andじゃないとマズくね?
0259nobodyさん
2009/03/09(月) 01:30:03ID:???0260nobodyさん
2009/03/09(月) 01:40:09ID:???$hoge = 'c';
if ($hoge ne 'a' and $hoge ne 'b' ){
print "ok";
}
なら ok で、このとき $hoge = 'b' ならなにもしないんですよね?
0261nobodyさん
2009/03/09(月) 01:46:15ID:???おっけー。
あと、既に知ってるかもしれないが
「ド・モルガンの法則」でぐぐってみると勉強になるかも
0264nobodyさん
2009/03/09(月) 04:12:13ID:???0265nobodyさん
2009/03/09(月) 04:36:41ID:???月刊ifの全て第18号には、こんな用例がのっているはずw
$hoge = 'c';
$hoge ne 'a' and $hoge ne 'b' and print "ok";
0266nobodyさん
2009/03/09(月) 19:03:15ID:???0267nobodyさん
2009/03/09(月) 23:14:05ID:???初めてflockを使ってみたのですが、実際にflockを間違えずに入れれてるかどうか
確認するにはどうすればいいでしょうか。
0268nobodyさん
2009/03/10(火) 00:01:48ID:???たとえば純粋にカウントアップするスクリプト書いて、
ab で 30 のクライアントで 10000 回もぶん回せば結果は出るかと思うよ
0269nobodyさん
2009/03/10(火) 11:58:59ID:???ワクワクを百倍にしてヤフオクの主役になろう♪
0270nobodyさん
2009/03/10(火) 11:59:31ID:???0271nobodyさん
2009/03/11(水) 22:07:23ID:???abってモジュールがあるのでしょうか?
ググッて見たけど、ソートの$a<=>$bとかばっかりひっかかってわかりませんでした。
検索語にapacheも追加すると幸せになるかもしれません。
0274nobodyさん
2009/03/12(木) 16:37:21ID:???範囲演算子の「..」と「...」をスカラーコンテキストとして評価して
状態遷移処理をするプログラムを活用している人はいるのだろうか?
0275nobodyさん
2009/03/12(木) 17:06:33ID:???0276nobodyさん
2009/03/12(木) 19:29:47ID:???なるほど
試しに使ってみたけど論理が混乱して変数でフラグ持たせるやりかたで未だにやっているけど
実際に嫌と言うほど使っている人がいるってことは、俺がバカだったというだけみたいだな出直してきます
0277nobodyさん
2009/03/14(土) 16:39:37ID:???0278nobodyさん
2009/03/14(土) 20:53:02ID:???ソースを参考に、こんなの書いたけど駄目でした。
package Hoge;
use strict;
use warnings;
sub import {
strict->import;
warnings->import;
}
package main;
use Hoge;
$hoge=1; # ここでエラーになって欲しい
0281nobodyさん
2009/03/16(月) 00:10:49ID:???フレームワークにTripletailを使いたいのですが、
どうやっても
DBI connect('test:localhost','user',...) failed: Can't create TCP/IP socket (10106) at C:/Perl/site/lib/Tripletail/DB.pm line 1102と
エラーが出てしまって…
コードはiniのDB設定以外Tripletailのチュートリアルにあるものそのままだし
DBのユーザー名やパス等も間違いないと思うのですが。
誰かTripletail使ってる人いませんか?
0283nobodyさん
2009/03/23(月) 00:31:29ID:???多くの場面で使われているということだけでは、何も評価したことにならんよ。
「あれがいいってみんなが言ってるよ。」
0284nobodyさん
2009/03/23(月) 01:06:40ID:???直接言えよ
Module::CoreListに載っていればいいのか、
Plaggerとかの有名どころで使われているモジュールがいいのか、
CPANに上がってりゃそれでいいのか、
場末のコードスニペットがいいのか、
判断どころは色々だろ
0285Nobodyさん
2009/03/24(火) 02:30:18ID:???redapple 432235
redstrawberry 2934
こんな感じで文字列と数字で構成された行を数字の高い順(降順)
でソートして↓のようにするにはどのようにすればいいでしょうか?
redapple 432235
redstrawberry 2934
yellowlemon 234
0286nobodyさん
2009/03/24(火) 04:35:51ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_sort_an_array_by__anything_
my @sorted = map "$_->[0]\n",
sort { $b->[1] <=> $a->[1] }
map [ $_, / ([0-9]+)/ ],
('yellowlemon 234', 'redapple 432235', 'redstrawberry 2934')
;
0287nobodyさん
2009/03/24(火) 06:28:56ID:???my @targets = ('yellowlemon 234', 'redapple 432235', 'redstrawberry 2934');
y @sorted_targets = sort {
(split ' ', $b)[1] <=> (split ' ', $a)[1];
} @targets;
0288nobodyさん
2009/03/24(火) 16:58:27ID:???> ソートするものの一部を取り出す必要があるような複雑な関数を使うのなら、
> ソート関数の内側でそれを使ってはいけません。最初にその関数で使う部分を
> 取り出します。なぜなら、sort のBLOCKは同じ要素に対して何度も何度も
> 呼び出される可能性があるからです。
sort() が比較要素をキャッシュしてくれるようにでもなっているのなら、
{ (split ' ', $b)[1] <=> (split ' ', $a)[1] } でいいけどね。
0289287
2009/03/24(火) 20:07:04ID:???アドバイス、サンクス。
確かに考えてみたら、比較の度にsplitが実行されて287の方が遅そうな感じだな。
でも、気になってベンチ(ランダムに作った100要素の@targetsを各functionでソート。これを1000000回実行して結果取得)をとってみたら意外な結果だった。
287で書いたコードの方が455倍速いという結果に。。。
これってsplitの処理がたまたま、map=>sort=>mapのデータ渡しや正規表現処理より速いってこと???
Rate without_split_in_block with_split_in_block
without_split_in_block 3982/s -- -100% (286で書かれたcode)
with_split_in_block 1818182/s 45558% -- (287で書かれたcode)
0290nobodyさん
2009/03/24(火) 22:20:58ID:iEyVm5itこのまま実行してもできない。。
誰か教えてくれんか?perlの知識がまったくないのでわからんのです。
ちなみに環境はXPです。
while(<>){
s/<(\/)?([\w]+)/<$1\L$2/g; #要素タイプ名を小文字に
s/ (\w+)="/ \L$1="/g; #属性名を小文字に
#空要素タグを /> で閉じる
s/<(br|hr|img|link|input|col|base|meta|area|param)(.*?)>/<$1$2 \/>/g;
s/<a name="(.*?)"/<a name="$1" id="$1"/g; #id属性を加える
print;
}
0291nobodyさん
2009/03/25(水) 04:28:21ID:???ようはフィルタでしょ?
スクリプトをfoo.plとか適当な名前で保存して、
フィルタに掛けたいファイルを用意して(例えばbar.txt)
perl foo.pl bar.txt
すりゃいいだけかと
ファイルに吐かせたいなら
perl foo.pl bar.txt > out.txt
0292nobodyさん
2009/03/25(水) 04:53:50ID:???CPANでモジュールをインストールしようとすると、
Alert: While trying to 'parse' YAML file
'C:\usr\cpan\FTPstats.yml'
with 'YAML::XS' the following error was encountered:
ってばかり吐かれて死にそう。
ググったらFTPstats.ymlを削除すればとあってやってみたけど効果なし。
何か策があれば教えてください。
0293nobodyさん
2009/03/25(水) 08:15:32ID:???ベンチコードが分からんと追試しようが無い。
http://boobar.hp.infoseek.co.jp/bench/sort.txt
0294287
2009/03/25(水) 10:10:31ID:???わざわざサンクス。
293のコードで俺の環境でやってみた結果。V
GRT: 6 wallclock secs ( 5.00 usr + 0.00 sys = 5.00 CPU) @ 2713378.60/s (n=13566893)
ST: 6 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 2560283.68/s (n=13492695)
split: 4 wallclock secs ( 5.08 usr + 0.00 sys = 5.08 CPU) @ 2935626.97/s (n=14912985)
テスト環境:(perl) v5.10.0 (OS) Ubuntu desktop 8.10 32bit (CPU) Core2Quad Q9650 (メモリ) DDR2-6400 2GBx2
で次のレスが、289で使用したコードV
0295287
2009/03/25(水) 10:12:20ID:???use Benchmark qw(cmpthese);
use String::Random;
my @targets;
for (0 .. 100) {
push @targets, get_a_line();
}
cmpthese(1_000_000, { with_split_in_block => sub { with_split(@targets) },
without_split_in_block => sub { without_split(@targets) }, });
sub with_split { return sort { (split ' ', $b)[1] <=> (split ' ', $a)[1]; } @_; }
sub without_split {
return map "$_->[0]",
sort { $b->[1] <=> $a->[1] }
map [ $_, / ([0-9]+)/ ], @_;
}
sub get_a_line {
my $string_random = new String::Random();
$string_random->{'A'} = ['a'..'z'];
my $label = $string_random->randpattern('AAAAAAA');
$string_random->{'N'} = [0..9];
my $score = $string_random->randpattern('NNNNNNN');
return $label . q{ } . $score;
}
0296287
2009/03/25(水) 10:26:31ID:???ARGV[0] = 1000
Benchmark: running GRT, ST, split for at least 5 CPU seconds...
GRT: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 339.85/s (n=1808)
ST: 6 wallclock secs ( 5.29 usr + 0.00 sys = 5.29 CPU) @ 269.19/s (n=1424)
split: 5 wallclock secs ( 5.14 usr + 0.00 sys = 5.14 CPU) @ 90.86/s (n=467)
0297287
2009/03/25(水) 11:00:33ID:???0298nobodyさん
2009/03/25(水) 22:28:41ID:V8wgPxlAありがとう!おかげで助かった。
0299nobodyさん
2009/03/25(水) 22:41:59ID:???0302nobodyさん
2009/03/26(木) 01:34:45ID:???http://ja.wikipedia.org/wiki/Hello_world
まず画面上に "Hello, world!"、と表示することから始めるんだ。
0303nobodyさん
2009/03/26(木) 11:24:01ID:???さっそくどこかで使ってやろう
0304nobodyさん
2009/03/26(木) 12:07:44ID:???シャチ泳ぎの方が何かと好きだけど、覚えとこ。
実際にはそこまで処理時間にシビアな仕事はしてないけどw
0305nobodyさん
2009/03/26(木) 14:19:19ID:???0306nobodyさん
2009/03/26(木) 15:38:08ID:???AのサーバーにあるCGIから
BのサーバーにあるCGIへPOSTする方法を探しています。
HTMLのformタグのmethod=postと同じことをCGIで実行出来ないでしょうか?
0307nobodyさん
2009/03/26(木) 15:49:55ID:???あるいはJavaScriptでブラウザにPOSTさせるとか
というのは嘘で、無理だから諦めろ
0308nobodyさん
2009/03/26(木) 16:00:49ID:???ご返答ありがとうございます。
よそのサーバーのCGIに処理を実行させるのは危ないなぁとも考えていましたが、無理でしたか。
同一のサーバーでしたら可能でしょうか?
0309nobodyさん
2009/03/26(木) 17:29:37ID:???0310nobodyさん
2009/03/26(木) 23:43:53ID:???0312nobodyさん
2009/03/27(金) 01:22:46ID:???やり方書いてあるんだから。
0313nobodyさん
2009/03/27(金) 07:22:34ID:???http://www.seshop.com/detail.asp?pid=6160
『10日でおぼえる Perl /CGI入門教室 第2版 』2005/9/5発売。
を購入しようと思っています。
この書籍が出た時点のバージョンのPerlをWindowz Vistaで
動かすことは可能でしょうか?バクがでたりエラーなどは大丈夫でしょうか?
これからPerlを勉強するので詳しいことはわかりません。
なお、PHP関連の書籍に付録で付いていたXAMPP1.6.5はインストール済みで
少なくともVistaで動作確認済みとPHPの書籍にありました。
どなたか回答よろしくお願いいたします。
0314nobodyさん
2009/03/27(金) 08:24:05ID:???そんなのが出たのか。
0315nobodyさん
2009/03/27(金) 09:14:42ID:???VistaならActivePerl 5.8.8を入れておけば問題ない
0318nobodyさん
2009/03/27(金) 20:16:13ID:???ほんっとの初心者は Apache、PHP、MySQL それぞれを個別に入れれ
0319nobodyさん
2009/03/27(金) 21:58:01ID:???例のoverload絡みのバグへの対応は他ディストリより糞遅かったけど
0320nobodyさん
2009/03/28(土) 00:42:44ID:mucWI58Rある文字列UTF-8を、指定の文字数で分割し、配列に格納したいと思います
例)UTF-8の文字列を5文字ずつ分けたいと思い↓のコードを書きました
$string = "民主党支持団体=jichiro,山口組、ブラクカイドウ、韓国民潭";
@output = $string =~ m/.{5/g;
print $_, "\n" foreach @output;
↑の結果は↓のようにしたいのですが、今のままだと途中で文字化けをしてしまいます
--------------
民主党支持
団体=ji
chiro
,山口組、
ブラクカ
イドウ、
韓国民潭
--------------
文字化けをしないようにする方法を教えてください
0321nobodyさん
2009/03/28(土) 00:53:26ID:???use Encode;
$string = decode('utf-8', $string);
my @output = $string =~ m/.{5}/g;
print encode('utf-8',$_), "\n" foreach @output;
% perl 2ch.pl
民主党支持
団体=ji
chiro
,山口組、
ブラクカイ
ドウ、韓国
0322nobodyさん
2009/03/28(土) 01:03:13ID:???use utf8;
を宣言して、スクリプトをutf8で保存すればよいのでは?
正規表現の{5の後に}が抜けている
さらに、{5}では、最後の5文字未満が拾えない
そこで
@output = $string =~ m/.{1,5}/g;
とすればok
0323nobodyさん
2009/03/29(日) 14:40:26ID:???モノクロ2階調で描かれたpsdファイルを読み込んで保存すると
ぐちゃぐちゃに壊れたような画像になってしまいます。
上手く変換する方法は無いでしょうか。
$image->Read("in.psd");
$image->Write("out.jpg");
0324nobodyさん
2009/03/29(日) 21:07:47ID:???http://www.imagemagick.org/script/formats.php
とりあえず、最新バージョンは対応はしてみてるようだから、
perlじゃなくて、command lineからためしてみたら。
0325nobodyさん
2009/03/29(日) 22:55:28ID:???最新バージョンの 6.5.0-9 をDLして試してみましたが、
変わりませんでした。
ImageMagickの質問ってこのスレでいいんでしょうかね?
CG板とかUNIX板は違いそうだし。
0326nobodyさん
2009/03/29(日) 23:40:56ID:???ImageMagickはコマンドラインで提供されてるから、
perlをそもそも使わないで試したらってことです。
まず、psd,jpgサポートしてるか調べる
identify -list format
この辺ためす
http://www.imagemagick.org/script/command-line-tools.php
このへんで動くのに、perlだと動かない場合はここで良いいと思うけど、
そもそも動かない場合は、perl関係ない。
0327nobodyさん
2009/03/30(月) 00:10:07ID:???そもそも動きませんでした。
スレ違いなのでどこかに移動しようと思います。
・・・どこに移動するのがいいでしょうか?
0328nobodyさん
2009/03/30(月) 11:49:19ID:???software板にでも行きゃいいんじゃねえの。
0329nobodyさん
2009/03/30(月) 19:04:34ID:???0330nobodyさん
2009/03/30(月) 20:35:52ID:???0331nobodyさん
2009/03/31(火) 16:12:44ID:???sub TransGender {
my $sth = $dbh->prepare('SELECT id, name, sex FROM Person;');
$statusHandle->execute;
while(my @row = $statusHandle->fetchrow_array) {
my ($id, $name, $sex) = @row;
$sex = ($sex eq 'male') ? 'female' : 'male';
my $updh = $dbh->prepare('UPDATE Person WHERE id=? SET sex=?;');
$updh->execute($id, $sex);
}
}
以下の警告が出て更新出来なかった。
DBD::SQLite::st execute failed: database table is locked(1) at dbdimp.c
この場合まずIDを問い合わせて配列に格納し、
今度はIDから一つ一つデータを問い合わせて$sth->finish()した後に更新するの?
なんか定石みたいなのってありますかね。
0332nobodyさん
2009/03/31(火) 16:35:28ID:???同じく初心者の視点から思ったことを
この場合(全員が同時に性転換する場合)に限っては、sexテーブルを切り分ければ解決じゃないか?
あとSQL文最後のセミコロンは要らなかった記憶がある
excuteしたあとの動作うんぬんについては上級者に任せます
0333nobodyさん
2009/03/31(火) 16:55:11ID:???ごめん、コード例がまずかった。
後出しで申し訳ないけど、実際には全員が性転換するとは限りません。
舐めて逐一更新したいとき、どういう流れで作るべきなのかを聞きたかった。
prepareのセミコロンが要らないってのは了解。
0334nobodyさん
2009/03/31(火) 17:17:50ID:???なら
update person set sex='男' where sex='女' and...
update person set sex='女' where sex='男' and...
みたいに2つSQL文を発行すれば?
他に読み出してから行う処理がなくて済むなら速いと思う
0335nobodyさん
2009/04/01(水) 11:55:36ID:???もういいです。ありがとうございました。
0336nobodyさん
2009/04/01(水) 16:46:55ID:???$word2 = '検出文字';
print "Content-Type:text/html\n\n";
if($word2 =~ /$word/ig) {
print "out";
} else {
print "safe";
}
掲示板のスパム対策でうまく動かない部分があったので上のようなプログラムで試したところ、
実行すると「out」が出力されてしまいます。
「チソコ」だと「safe」が出力されます。
どうすればよいでしょうか?
0337336
2009/04/01(水) 17:08:31ID:???if($word2 =~ /\Q$word\E/) {
で解決しました。
0338nobodyさん
2009/04/01(水) 20:37:02ID:+q6m3hR8CatalystでDBIx::Class使って pagerやろうとしたのです
my $rs = $c->model(..)->search({}, {page =>1, rows=>10});
$c->stash->{data} = $rs;
.tt にて
[% SET pager = data.pager %]
[% INCLUDE pager.tt %]
で、data.pagerを参照するところで
Can't create pager for non-paged
と言われて困ってます。
どなたか助けて頂けませんか?
0339nobodyさん
2009/04/01(水) 21:01:56ID:???0340nobodyさん
2009/04/02(木) 04:32:48ID:???↓の書き方で問題ないでしょうか?
my @TARGET = grep (/hoge/, @hogehoge);
if ($#TARGET) {
# エラー
}
0341nobodyさん
2009/04/02(木) 05:02:24ID:???そのコードなら、grepにヒットするのが1個もない時も動いちゃうよ。
1個の時のみなにかしたいなら、
if( scalar(@TARGET)==1 )
とかにしたほうがよいんでない。?
0342nobodyさん
2009/04/02(木) 05:20:44ID:???ヒットするのが1個もないときの$#TARGETは-1になると思うんですが、どうでしょう?
$#TARGETが未定義値を返す場合があったりすると困りますが・・
0344nobodyさん
2009/04/02(木) 05:34:02ID:???自分が書くなら、
1個の時のみなにかしたい
→ if( scalar(@TARGET)==1 )
1個以外の時になにかしかい
→ unless( scalar(@TARGET)==1 )
みたいにするかな。
じゃないと、大分たって後から見直したり、
誰か他人に見てもらったりする時わかりにくじゃん。
0345nobodyさん
2009/04/04(土) 18:14:39ID:???普通に個数数えるべきだと思うが
0346nobodyさん
2009/04/04(土) 20:48:24ID:???http://search.cpan.org/dist/perl-5.10.0/pod/perlsyn.pod#Truth_and_Falsehood________
> The number 0, the strings '0' and '', the empty list (), and undef are all false in a boolean context.
0347クレクレコボラー
2009/04/06(月) 21:20:03ID:IJNdmC5qこれは、変数iが何だったらって意味?
0348nobodyさん
2009/04/06(月) 21:23:51ID:???0349クレクレコボラー
2009/04/06(月) 21:25:01ID:IJNdmC5q0350nobodyさん
2009/04/06(月) 21:54:57ID:???0351クレクレコボラー
2009/04/06(月) 22:10:12ID:IJNdmC5q0352クレクレコボラー
2009/04/06(月) 22:13:51ID:IJNdmC5qi = a-zA-Z0-9_だったらって事だよね。
0353クレクレコボラー
2009/04/06(月) 22:16:57ID:IJNdmC5q何年やっても。
俺が馬鹿なだけか。w
0354クレクレコボラー
2009/04/06(月) 23:08:51ID:IJNdmC5qこの検索文字列「蜿悶j螟悶@」
「取り外し」と入力しているみたいなんだけど、文字化けしてしまう。
以下のようなソースを入れて、ほとんどがきちんとした文字に変換
されるんだけど、変換されないものもわずかにある。
(自分の名前も名字と名前の間にブランクを入れないと文字化けする。
名字と名前の間にブランクを入れると、なぜかきちんと変換される。)
use Encode;
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;
$guess = Encode::Guess::guess_encoding($a2);
if (ref $guess && $guess->name ne 'shiftjis') {
Encode::from_to($a2, $guess->name, 'shiftjis');
}
elseのときに、どのようなソースを書けばいい?
全部きちんとした文字列に変換したいです。
つーか、仕事がないので自宅警備員やってるんだけど、COBOLの仕事
くれくれー。
0355nobodyさん
2009/04/07(火) 00:12:40ID:???0356クレクレコボラー
2009/04/07(火) 01:58:46ID:YZyHfBtrうん。それ理解出来たから。
それよりCOBOLの仕事探してんだけど。紹介してくれくれー。
出来なかったら
>>354の質問に答えてくれくれー。
0357nobodyさん
2009/04/07(火) 10:01:01ID:???いまどきはutf8のことも多いのでguessの候補に入れるといいと思うが、
utf8とeucは文字コードのよく使われる部分がもろに重なっているので
誤判定が多いのが悩みどころだな。eucは1文字2バイト、utf8は3バイト
なので6の倍数バイトでなければ区別がつくんだが、6の倍数バイトの
ときは辞書か出現確率テーブルでも用意してひくしかないんじゃない
かな。
0358nobodyさん
2009/04/07(火) 21:56:59ID:???0359nobodyさん
2009/04/07(火) 22:22:56ID:???そんなふうに考えていた時期が僕にもありました。二週間くらい。
0360nobodyさん
2009/04/08(水) 18:43:51ID:???0361nobodyさん
2009/04/08(水) 21:41:46ID:???0362nobodyさん
2009/04/14(火) 17:42:33ID:???具体的には、この形式のDLLに対して(LimeChat用のDLLです。参考まで)
>extern "C" __declspec(dllexport)
>void __cdecl Function(const char* Input, char* Output);
下記の形でいけるかなと思ったのですが、失敗しました。(perl510.dllの不正終了)
>use Win32::API;
>my $API = new Win32::API("samplel.dll","libset",[P,P],N);
>$buffer=0;
>$input ="hogehoge";
>$API->Call(\$input,\$buffer);
>print $buffer;
ご存知の方いらっしゃいましたら、何かアドバイス戴ければと
0363nobodyさん
2009/04/14(火) 18:57:46ID:???$buffer = "\x00" x 0xffffffff;
0364nobodyさん
2009/04/25(土) 20:26:28ID:???どんな書き方になる?
ユーザが二人ログインするのを待ってゲーム開始、みたいな感じなんだけど
0365nobodyさん
2009/04/26(日) 18:39:33ID:???WebカメラつないでSkypeが一番現実的だ
0366nobodyさん
2009/04/26(日) 21:54:51ID:3axQaGr1(perlはActivePerlではなくXAMPPのperlアドオンです。)
ローカルディレクトリ
D:\video\2009-04-01\00:00_ニュース&スポーツ_.mpg
D:\video\2009-04-01\00:10_衆議院予算委員会 〜 衆議院第一予算室から 〜_.mpg
D:\video\2009-04-01\02:00_世界遺産 〜アテネ〜_.mpg
...以下続く
D:\video\2009-04-02\00:00_ニュース&スポーツ_.mpg
...このように日付ディレクトリが続く
ファイル名を見てわかるとおり、ぶっちゃけNHKの録画ファイルです。
このローカルディレクトリにあるファイル名(ディレクトリ付)をFile::Find::Ruleで取得して
split /\\/,$_;
$file = pop(@_);
split /_/,$file;
$name = $_[1];
等の処理をして、
$file : 「00:10_衆議院予算委員会 〜 衆議院第一予算室から 〜.mpg」
$name : 「衆議院予算委員会 〜 衆議院第一予算室から 〜」を
MySQLにSJISで登録したいのですが、全角「〜」や全角スペースなどで、文字化けが起こってできません。
・UTF-8に変換すればいいのでしょうか?
・SJISでの文字化けはどのようにしたら回避できますか?
0367nobodyさん
2009/04/26(日) 22:46:55ID:???どうしてもSJISのままでってことならSQLエスケープするとか
0368nobodyさん
2009/04/27(月) 02:18:16ID:???Windows上では、"SJIS"ではなくて"cp932"でMySQLの文字コード指定してみ。
けど、DBで管理するんなら、日本語(マャ泣`バイト)使うのは、ファイルのタグとゆうかDB上での
説明としてだけにして、実際のファイル(パス)名はシングルバイトだけにするのが無難。
(上でもやってるように、局と日付、放送時間にするとか)
0369nobodyさん
2009/04/27(月) 08:43:15ID:???ありがとうございます。
MySQLはPHPmyadminで管理しているので、なるべく平文で入力したいと思っています。
ファイル管理と実際のファイル名を別にすることも考えたのですが、
DLNAでファイルそのものをLAN内配信しているので、日本語ファイル名を使いたいのです。
そもそも、\もしくは/のディレクトリ符号と、SJIS文字が一行に入っているのが悪いのでしょうか。。。
PHPmyadmin上のcp932の指定を勉強してきます。。。
0370nobodyさん
2009/05/01(金) 04:37:55ID:???正規表現について質問です
掲示板等の本文で特定の文字があった場合正規表現でリンクを生成したいんですが
(#a#検索文字#/a#)
携帯の場合検索文字にスペースがあった場合スペース以降が無視されてしまうので
URLエンコードをしようと思っています。
そこで質問ですが、$1に入っている「検索文字」をURLエンコードするにはどうしたら
いいのでしょうか?
$text =~ s/#a#(.*?)#\/a#/<a href=\"s.cgi\?word=$1\">$1<\/a>/g;
今現在はこのようにしています。
このword=$1の$1部分だけURLエンコードがしたいんです。
よろしくお願いします。
0371nobodyさん
2009/05/01(金) 10:43:26ID:???0372371
2009/05/01(金) 10:54:17ID:???0373nobodyさん
2009/05/01(金) 19:16:23ID:???動作確認しました。
ありがとうございます。
…正規表現ってこういう書き方も出来るんですね
勉強になりました
まぁ今は理解してない部分もあるんで調べてみようと思います。
0374nobodyさん
2009/05/02(土) 05:07:16ID:sYtZpFZzどなたか間違っている箇所がわかれば教えてくださいませ。
------------------------------------
txt形式のデータに
119
110
049
025
のように数字が並んでいます。
これを@datalistに開くことまではできました。
やりたいことは、この中から$eraseに該当する数字だけは消し、
あとの数字はそのまま残す、という処理です。
for ( my $k = 0 ; $k < @datalist ; $k++ ) {
if ( $datalist[$k] ne $erase ) {
$newlist[$k] = $datalist[$k];
}
}
で、@newlistを再び元のログtxtに書き込む。
------------------------------------
というような感じで行けないかと思ったんですが、処理し終わったログtxtを開くと、
元のまんまの数字が並んでいてまったくかわっていません。
ftpで見ると、ログそのものは更新されているので、
一度スクリプトがログを開いてはいるみたいなのですが…。
どうかよろしくおねがいします!
chomp @datalist;
@newlist = grep $erase != $_, @datalist;
改行が含まれていそうね♪
0376nobodyさん
2009/05/02(土) 10:31:24ID:???push(@newlist, $datalist[$k]);に換えないといけないんじゃないかな?
前後の処理がよくわからないし、もっと効率のいい方法あるとは思うけど・・
0377nobodyさん
2009/05/02(土) 12:08:08ID:???0378nobodyさん
2009/05/02(土) 12:44:54ID:???0379374
2009/05/02(土) 12:47:26ID:???ありがとうございます
そのとおりやってみたら、見事に$erase以外がログに書き込まれていました。
おっしゃる通り、改行が含まれていたせいみたいです。
しかし、修正されたログにも同じように数字ごとに改行を含んでおきたいのですが、
この処理だと
119049025
のように改行なしで一気に書かれてしまいました。
そこで、元の自分の書いたものに>>376さんのアドバイスで修正を加え
chomp @datalist;
for ( my $k = 0 ; $k < @datalist ; $k++ ) {
if ( $datalist[$k] ne $erase ) {
push(@newlist, "$datalist[$k]\n");
}
}
としてみると、一応、望み通りの結果を出すことができました。
二晩くらい悩みまくったので、とても助かりました。
ほんとうにありがとうございました。
grepを使った方法は今まで使ったことが無くて、一行で処理できる
美しいコードに感激したので、もしよろしければ自分の書いた方法以外で
同じ結果の出せる(改行含む)書き方があれば教えてやってください。
0382nobodyさん
2009/05/02(土) 17:09:01ID:???0383nobodyさん
2009/05/02(土) 17:44:55ID:???0384nobodyさん
2009/05/02(土) 18:10:31ID:???0385384
2009/05/02(土) 18:15:58ID:???0386374
2009/05/02(土) 18:37:39ID:???map { s/^\Q$erasedat\E\n$//; } @datalist;
で希望通りに処理されるのを確認できました。
mapとかgrepというのを使いこなせば、いま自分の書いてる現行のスクリプトで
改善できるところがすごく多そうなので、ちょっと勉強してみます。。
ほんとに助かりました。親切にありがとうございました
0387374
2009/05/02(土) 18:39:02ID:???0388nobodyさん
2009/05/02(土) 19:51:16ID:???0389nobodyさん
2009/05/02(土) 21:04:48ID:???0391nobodyさん
2009/05/05(火) 04:15:46ID:???0392nobodyさん
2009/05/05(火) 10:06:17ID:???0393nobodyさん
2009/05/05(火) 13:43:50ID:???0394nobodyさん
2009/05/05(火) 14:21:29ID:???0395nobodyさん
2009/05/06(水) 01:57:30ID:???0396nobodyさん
2009/05/06(水) 08:18:31ID:???LWP::UserAgent を使って取得したいんですが、
リンクを幾つかたどっていく必要があります。
cookie は何とかなったんですが、
1つ前の html ファイルにあるパラメータを取得して POST メソッド時に引き渡すところの
解析に手を焼いています。
# パラメータ名は判っているので現在は文字列検索で取得しています。
a href などではなく、POST メソッドのパラメータも解析してくれる
便利なパッケージって無いでしょうか
0397nobodyさん
2009/05/06(水) 11:03:19ID:???&sub (@hoge);
ではダメなんでしょうか?
この記述で渡して、受け取ったサブルーチン側でログに書きだしたら
各行に空白が入るようになってしまったんですが。。。
0398nobodyさん
2009/05/06(水) 11:35:46ID:???0399nobodyさん
2009/05/06(水) 11:50:51ID:Ms7+WRwlもともとの値がちゃんと期待通りの値か確認してみ
他の可能性としては
my(@args);
としてるだけで
@args = @_;
みたいにするの忘れててサブルーチン側でちゃんと受け取ってないとか
0400nobodyさん
2009/05/06(水) 13:42:27ID:???HTML::Form(LWPの付属モジュール)
WWW::Mechanize(LWPのスーパークラス的なモジュール)
0404397
2009/05/06(水) 19:32:33ID:???同じルーチンの中でやると普通に綺麗に書き出されるんだけど
別のサブルーチンに引き渡すと、データそのままで、各行の頭に半角空白が1個ずつ挿入されてる、って感じです。
>>399
&sub (@hoge);
で渡して、受け取る側で
@data = $_[0];
と書いてます。
0406nobodyさん
2009/05/06(水) 21:07:16ID:???0408nobodyさん
2009/05/06(水) 21:33:27ID:???0409nobodyさん
2009/05/06(水) 23:48:47ID:???簡単なスクリプト作ってみたらイイ感じに出来た。
無事思惑通りのことができそう。
今まで URL を解析して UserAgent で get していたのが楽になる (T-T)
0411nobodyさん
2009/05/07(木) 12:48:09ID:???0412キュウティイハニ-
2009/05/07(木) 17:35:14ID:EGaRRr78use LWP::Simple;
getstore('http://www.yahoo.co.jp','d:\\test\\nikki.tmp2');
しかし、上記のyahooの場合は全てが取得されますが、
サイズの大きいサイトでは途中まで切れてしまいます。
(サイズの大きいサイトのサンプルが具体的に言えません、すみません)
サイズは128kBくらいまでなら、取得できるようです。
取得サイズを指定する何かがあるのでしょうか?
0413nobodyさん
2009/05/07(木) 18:57:38ID:???getstore('http://d.hatena.ne.jp/diarylist?mode=lirs','./lirs.dat');
> dir lirs.dat
2009/05/07 18:56 57,602,778 lirs.dat
1 File(s) 57,602,778 bytes
?
0414キュウティイハニ-
2009/05/07(木) 20:20:10ID:EGaRRr78回答ありがとうございます。
ためしためしで先程からテストしていたんですが、
どうも、対象のサイトに依存するようです。。。
0415nobodyさん
2009/05/07(木) 21:00:25ID:???そちらの環境で同様の現象が起こるサイトが出せない限り、これ以上は無理だね
0416nobodyさん
2009/05/07(木) 21:40:07ID:???0417キュウティイハニ-
2009/05/07(木) 21:47:42ID:EGaRRr78あるアクセス解析のページなんですが、
IEでソース表示を行った場合も、
同様の場所で、ソースが切れています。
ブラウザ上では切れていなく表示されているのに。
なんで???
0418nobodyさん
2009/05/07(木) 22:02:57ID:???ttp://sakura_editor.at.infoseek.co.jp/
0419nobodyさん
2009/05/07(木) 22:03:41ID:???ttp://www2a.biglobe.ne.jp/~qpon/html/ie_edit.htm
0420キュウティイハニ-
2009/05/08(金) 16:41:50ID:CAAVVdSZこんな感じでもダメでした。。。
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->timeout(30);
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');
$req = HTTP::Request->new(GET => $kw_url);
$res = $ua->request($req);
$status = $res->status_line;
$content = $res->content;
0421キュウティイハニ-
2009/05/08(金) 16:42:32ID:CAAVVdSZ自動的にプログラムで取得してファイルに書きたいのです。
0422nobodyさん
2009/05/08(金) 16:44:17ID:???$ua->timeout(3000000000000000000000000000000000すげえ);
0423nobodyさん
2009/05/08(金) 16:49:19ID:???テストしてみたい
0424キュウティイハニ-
2009/05/08(金) 17:05:05ID:CAAVVdSZ具体的に教えられないんです。
i2iアクセス解析のサーチワード一覧のソースが欲しいんです。
一例ですが、以下のようにget出来ますが、4番目の"q=%00"が出てくると、
ソースがちょん切られるみたいです。(※のところに[EOF]がくる)
<td align="right">3</td>
<td><a href=http://www.google.co.jp/search?hl=ja&q=BOSS&lr= target=_blank>BOSS</a></td>
<td align="right">4</td>
</tr>
<tr>
<td align="right">4</td>
<td><a href=http://www.google.co.jp/search?hl=ja&q=%00&lr= target=_blank>※
0425nobodyさん
2009/05/08(金) 17:08:59ID:???てめーで解決しろよ
0426キュウティイハニ-
2009/05/08(金) 17:11:45ID:CAAVVdSZそこで、切られるみたいです。
でも、ブラウザ(IE8)上では、切れていないんです。
0427キュウティイハニ-
2009/05/08(金) 17:12:10ID:CAAVVdSZ冷たいなぁ。。。
0428キュウティイハニ-
2009/05/08(金) 17:13:41ID:CAAVVdSZ0429nobodyさん
2009/05/08(金) 17:20:09ID:???0430キュウティイハニ-
2009/05/08(金) 17:27:31ID:CAAVVdSZ顕著な検索エンジンを経由してきた検索語と回数をカウントしたいんですが、簡単なんですか?
0432キュウティイハニ-
2009/05/08(金) 17:39:56ID:CAAVVdSZ死ぬほどないんですけど><
http://www.google.co.jp/search?hl=ja&q=apache+referer+%E9%9B%86%E8%A8%88+%E6%A4%9C%E7%B4%A2%E8%AA%9E+perl&btnG=%E6%A4%9C%E7%B4%A2&lr=
0433nobodyさん
2009/05/08(金) 18:01:07ID:???q=apache+log+perl
\0 でつまずいてるようだから今後も苦労すると思う。
0434キュウティイハニ-
2009/05/08(金) 18:15:10ID:CAAVVdSZよくわからない。
apacheのログを入力として、
検索語(日本語)とその検索回数を
表示してくれるだけでいいのに。
0435nobodyさん
2009/05/08(金) 18:20:44ID:???0436キュウティイハニ-
2009/05/08(金) 18:21:55ID:CAAVVdSZ0437キュウティイハニ-
2009/05/08(金) 18:24:51ID:CAAVVdSZリファラーにq="なんたら"
って書いてある"なんたら"の
"なんたら"と、その回数が知りたいのです
0438nobodyさん
2009/05/08(金) 18:37:21ID:/tMyodOD>>432から"検索語"を抜いた"apache referer 集計 perl"でググっただけで死ぬほど出てくるというのに。
0439nobodyさん
2009/05/08(金) 18:38:33ID:/tMyodODopen IN, '<', '/apache/logs/access.log';
my%ref_cnt;foreach my$log(<IN>){$log=~m/^.*? .*? .*?\[.*?\] ".*?" [0-9]{3} .+ "(.*?)" ".*?"/;$ref_cnt{$1}++;}
my@keys=sort{$ref_cnt{$b}<=>$ref_cnt{$a}}keys%ref_cnt;for my$key(@keys){print$ref_cnt{$key}.":".$key."\n";}
0440キュウティイハニ-
2009/05/08(金) 18:39:16ID:CAAVVdSZうむ!頑張ってみる!
0441nobodyさん
2009/05/08(金) 18:42:59ID:???%00 は \0 の NULL 文字となる
だったような気がするんだマイハニー
0442キュウティイハニ-
2009/05/08(金) 18:52:02ID:CAAVVdSZ検索語が知りたいんです。
0443nobodyさん
2009/05/08(金) 18:54:48ID:/tMyodODもう君Analogでも使ってればいいと思うよ
0444キュウティイハニ-
2009/05/08(金) 18:56:58ID:CAAVVdSZバッチで取得したいのですぅ
0445nobodyさん
2009/05/08(金) 18:57:50ID:???0446nobodyさん
2009/05/08(金) 18:59:36ID:???0447キュウティイハニ-
2009/05/08(金) 19:01:25ID:CAAVVdSZ0449nobodyさん
2009/05/08(金) 19:49:09ID:???はい次の方どーぞ
0450アルモコニ
2009/05/08(金) 19:54:33ID:???米を煮たいと所存だす。
http://www.google.co.jp/search?hl=ja&q=%E3%83%8B%E3%83%AB%E3%82%B3%E3%83%A1&lr=
ケロロゲ?ムで火をつけリソウシを入れました。
いいぐあいにリソウシは紫の汁を出し、
結局、アルモコニでした。
http://www.google.co.jp/search?hl=ja&q=%E3%82%A2%E3%83%AB%E3%83%A2%E3%82%B3%E3%83%8B&lr=
0451nobodyさん
2009/05/08(金) 20:25:18ID:???試したら圧倒的になったんだけど。
文字列だとGuttman Rosler変換が断トツだった。
0452nobodyさん
2009/05/08(金) 21:03:07ID:???0453nobodyさん
2009/05/09(土) 00:02:11ID:???0454nobodyさん
2009/05/09(土) 01:54:05ID:???0455nobodyさん
2009/05/09(土) 10:19:40ID:???0456nobodyさん
2009/05/09(土) 10:20:01ID:???0457nobodyさん
2009/05/10(日) 08:47:53ID:P8pR48B+0458nobodyさん
2009/05/11(月) 20:26:11ID:???http://www.google.co.jp/search?q=%CE%B4%CE%B8%CE%BD%CE%B2&lr=
0459nobodyさん
2009/05/13(水) 13:11:51ID:oMl7P+AAxamppの環境で、Shift_JISで書いたコードが、問題なく動作するように
use encoding 'shiftjis', STDOUT => "shiftjis";
を加えたのですが、即座に動かなくなりました。
搭載されているperlはvar5.8.7なので、動かないはずがないのですが・・・
どなたか原因ご存知ありませんでしょうか?
0460nobodyさん
2009/05/13(水) 13:24:51ID:???0461nobodyさん
2009/05/15(金) 15:32:32ID:???一応結果は求めたものなのですが、正解なのかどうかわかりません
普通はこうやるとか、間違ってるからこう直せってのがあったら教えてください
my $url = 'http://www.google.co.jp/';
my($scheme, $userinfo, $host, $port, $path, $query, $anchor) =
$url =~ m/
(https?|shttp):\/\/
(?:((?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)@)?
(\d+\.\d+\.\d+\.\d+|(?:[a-zA-Z0-9][\-a-zA-Z0-9]*[a-zA-Z0-9]\.)*[a-zA-Z0-9]*)
(?::(\d+))?
(?:((?:\/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f])*)*))?
(?:\?((?:[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*))?
(?:\#((?:[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*))?
/ox;
0463nobodyさん
2009/05/16(土) 17:28:43ID:C7qkfi2duse encoding 'shiftjis', STDOUT => "shiftjis";
print "Content-Type:text/html\n\n";
my $cgi = new CGI::Lite;
my %g = $cgi->parse_form_data('GET');
print $g{'all-text'};
---表示結果---
\x{0093}\x{008c}\x{008b}\x{009e}\x{0093}s\x{008d}]\x{008c}Ë\x{0090}\x{00ec}\x{008b}\x{00e6}
(本当は「東京都江戸川区」とprintされる)
CGI::Liteは最新版。perl5.8.5 unix環境です
0464nobodyさん
2009/05/16(土) 18:01:49ID:???0465nobodyさん
2009/05/17(日) 15:36:49ID:dGMXPYwmurl_encodeはサブルーチンで普通に使えています
上記のように$BBに入っている文字列の中の「:」だけを全てエンコードしたいのですが、上記のコードだと「:」が「&url_encode(:)」という文字列に変換されてしまいます
正規表現の中でサブルーチンを呼び出すにはどうすればいいでしょうか?
0466nobodyさん
2009/05/17(日) 15:47:36ID:???0467nobodyさん
2009/05/18(月) 01:28:52ID:???0468nobodyさん
2009/05/18(月) 05:31:12ID:???「マニュアルに書いてあることを質問するな」とか云うはるか前の話として、
マニュアルをちょっと調べれば、3秒とか、長くても20秒くらいで
解決することを、わざわざ文章書いてポストするって、
どんだけ時間の無駄づかいなの?
0469nobodyさん
2009/05/18(月) 09:09:13ID:???0470nobodyさん
2009/05/18(月) 09:58:34ID:???$BB =~ s/:/&url_encode(':')/ge;
よりも↓の方が負荷がかからない
$BB =~ s/:/%3a/g;
と教えるだろうけどPerl使ってて負荷のこと言うと叩かれそうだから言わない
0471nobodyさん
2009/05/18(月) 12:45:23ID:???my $safe = uri_escape($bb, ":");
これで、おk。
0473nobodyさん
2009/05/18(月) 20:45:50ID:gm/uB6Clおまえさんには「教えてください」なんて口が裂けても言わないから
ダイジョウブダヨ。
0474nobodyさん
2009/05/19(火) 01:35:37ID:???0475nobodyさん
2009/05/19(火) 18:36:32ID:???サーバがUnixなので改行コードはLFにしてあります。アスキーで転送しました。
use strict;が原因かと思ってコメントアウトしたけど500のままなのです。
0477nobodyさん
2009/05/19(火) 19:34:05ID:???おお!動いた!ありがとうございます。
FFFTPの方で700に設定してたのが悪かったのかな・・・。他はこれで動いてるのに。
0478nobodyさん
2009/05/19(火) 19:44:30ID:???当たっちゃったか
apacheは、apacheユーザとかnobodyユーザとかで動くから、
700じゃ実行権限ないの。この設定はhttpd.confで出来るよ。
他で動いてる理由は、4700か2700になってるとかかもしれないね
もしくはrootユーザに設定されてるか。もしされてるなら危険なので変えよう。
0479nobodyさん
2009/05/19(火) 20:22:03ID:???0481nobodyさん
2009/05/19(火) 20:38:57ID:???0482nobodyさん
2009/05/19(火) 20:40:03ID:???stat
map
sort
0483nobodyさん
2009/05/19(火) 20:44:51ID:???0484nobodyさん
2009/05/19(火) 20:48:58ID:???0485nobodyさん
2009/05/19(火) 20:50:50ID:???while(<IN>){
print $_;
}
close IN;
時刻も取りたいなら、-tlにして、\sでsplit
0486nobodyさん
2009/05/19(火) 20:51:15ID:???0487nobodyさん
2009/05/19(火) 21:15:24ID:???@flies = `ls -tr`;(古い順)
0488nobodyさん
2009/05/19(火) 21:20:16ID:???use strict;
use File::stat;
opendir(DIR, "./") or die;
my @file = readdir(DIR);
closedir(DIR);
my @new = ();
for (@file) {
my $fi = stat($_);
push @new, {name=>$_, mtime=>$fi->mtime};
}
@new = sort { $a->{mtime} <=> $b->{mtime} } @new;
あとは@newが順番は更新日時順でハッシュの配列になってるから。
0489nobodyさん
2009/05/19(火) 21:22:11ID:???..
↑これ消さないと
0490nobodyさん
2009/05/19(火) 21:26:11ID:???まずこれが理解できるようになってから、自分で消してもらうってことで。
0491nobodyさん
2009/05/19(火) 21:28:16ID:???0492nobodyさん
2009/05/19(火) 21:30:22ID:???俺map嫌いなんだよ
0493nobodyさん
2009/05/19(火) 21:36:48ID:???opendir(IN, $dir);
@files= map{$_->[0]}sort{$a->[1]<=>$b->[1]}map{[$_,(stat("$dir/$_"))[9]]}grep(-f"$dir/$_", readdir(IN));
closedir(IN);
0494更新日時でソート
2009/05/19(火) 21:49:48ID:???0495nobodyさん
2009/05/19(火) 21:52:56ID:???0496nobodyさん
2009/05/19(火) 23:18:27ID:???0497nobodyさん
2009/05/19(火) 23:28:19ID:???0498nobodyさん
2009/05/20(水) 00:12:40ID:???0499nobodyさん
2009/05/20(水) 00:15:44ID:???0500nobodyさん
2009/05/20(水) 00:21:19ID:???とか?
でもこれはopendir+readdirだな
なんかのモジュール使うとかだと、結局はopenのラップだしなぁ
>>496
答えは?
0502nobodyさん
2009/05/20(水) 01:06:52ID:???opendirは相変わらず2引数だなぁ
0503nobodyさん
2009/05/20(水) 01:15:45ID:???ファイルハンドルはグローバルだから使うべからず(STDINとかの例外を除く)
>502の言うように3引数でmyつけて使うべし
0504nobodyさん
2009/05/20(水) 01:28:30ID:???俺は古いのでいいや、なんか混乱しそうだし
0505nobodyさん
2009/05/20(水) 01:33:39ID:???入出力に文字コード絡みの指定をしない時は、相変わらず2引数使ってることが多いかな。
けど、使い捨ての短いスクリプト書く時は、文字コード絡みがあっても、ついつい、
open(my $f,"$file_name");
binmode($f,":encoding(cp932)");
とかやっちゃうことも多い。
0506nobodyさん
2009/05/20(水) 01:36:09ID:???逆に不思議だ
0507nobodyさん
2009/05/20(水) 01:39:23ID:???何のことだろって思って調べたんだが、こんな感じであってる?
0508nobodyさん
2009/05/20(水) 01:48:12ID:???0509nobodyさん
2009/05/20(水) 02:03:59ID:???0510nobodyさん
2009/05/20(水) 13:51:48ID:???$hog にblessされたハッシュが入っているのか、テキストが入っているのか、
数値が入っているのかを利用する前に知りたい状況です。
0511510
2009/05/20(水) 13:52:55ID:???○blessされたハッシュのリファレンス
0514nobodyさん
2009/05/20(水) 20:33:00ID:???やりたいことは、"「で始まって」って終わる文字列"を置換したいです。
例えば、"「あ」「い」"を"「★」「★」"に置換したのです。
下記のように記述すると、多分2バイトコードである為、うまくいく場合と行かない場合が
あります。どのように記述すればよいか教えてください。
$data =~ s/「[^「」]*」/「★」/gi;
0515nobodyさん
2009/05/20(水) 20:40:54ID:???0517nobodyさん
2009/05/20(水) 22:23:39ID:???# 例えば入力がCP932(≒Shift JIS)なら……
# foo.pl (UTF-8で保存すること)
use strict;
use warnings;
use utf8;
use Encode;
my $encoding = find_encoding('cp932');
my $data = $encoding->decode(shift);
$data =~ s{
(?<= 「 )
( .+? )
(?= 」 )
}{★}xmsg;
print $encoding->encode($data);
__END__
入力
perl foo.pl 「あ」「い」「ほげほげ」
出力
「★」「★」「★」
まああれだ、正規表現を通さなくても、
入れるときデコード、出すときエンコードの癖を付けような
0518nobodyさん
2009/05/21(木) 01:23:27ID:???{★}xmsg;
を
{'★' x length($1)}xmsge;
にする感じで。
0519nobodyさん
2009/05/21(木) 02:45:24ID:???0521nobodyさん
2009/05/21(木) 15:48:56ID:???>>517氏の言うように、入出力時に変換するのが基本だから、
どこから読み込んで、どこに出力して、入力、出力、スクリプトそれぞれの
文字コードの情報があると、回答も得られやすいと思う。
古いPerlの場合、CPANからモジュールを突っ込んで使うか、
自分でガリガリ正規表現を書くことになる。
質問に条件をつければ、答えてくれる奇特な人がいるかもしれない。
全て文字コードCP932(日本語Windows環境)と仮定して、
ファイルから読んで、標準出力に出力する場合。
use encoding qw(cp932);
use open qw(:encoding(cp932) :std);
open(my $fh, "foo.txt") or die $!;
my $data = join('', readline($fh));
close($fh);
$data =~ s/「(?:[^」]+)」/「★」/g;
print $data;
0522514
2009/05/21(木) 16:41:46ID:???文字コードはShift_JISです。
具体的に説明します。
以下のコードを実行すると
2番目の「」の部分が置換されないのです。
プログラムを始めたばかりの未熟ですみません。
$data = "あ「い」う「ニ世、三世」え";
$data =~ s/「(?:[^」]+)」/「★」/g;
print $data;
exit(0);
0523nobodyさん
2009/05/21(木) 16:42:15ID:???0524nobodyさん
2009/05/21(木) 19:18:34ID:???$data =~ s/「.+?」/「★」/g;
print $data;
v(★0★)v
0525nobodyさん
2009/05/21(木) 21:18:35ID:???0527nobodyさん
2009/05/21(木) 22:17:03ID:???0528nobodyさん
2009/05/21(木) 22:37:14ID:???ttp://www.kt.rim.or.jp/~kbk/regex/regex.html#PERL
0529nobodyさん
2009/05/21(木) 22:58:52ID:???0530nobodyさん
2009/05/22(金) 12:59:45ID:???use strict;
use warnings;
use encoding qw(cp932);
use open qw(:encoding(cp932) :std);
my $data = "あ「い」う「ニ世、三世」え";
$data =~ s/「.+?」/「★」/g;
print $data;
exit;
[^x]+より.+?の方が速いは、衝撃的。
0532nobodyさん
2009/05/22(金) 13:20:16ID:???左から
+ . ?
0533nobodyさん
2009/05/22(金) 15:52:26ID:???0534nobodyさん
2009/05/22(金) 16:25:07ID:???> +? +と同様ですが、マッチングがものぐさ(non-greedy)に行われる点が異なります。
とあるが、ものぐさと言われてもわけが分からんだろうな。
greedyが「貪欲な」という意味になるので、non-greedyなら「慎ましく」あたりが該当するのではないか。
だが、慎ましくと言われてもなお意味不明なことだろう。
しかし同時に、分からない者は置いてけぼりで構わないという高潔さも感じたことだろう。
正規表現を覗くものは、正規表現からも覗かれているのだ。
0535nobodyさん
2009/05/22(金) 19:12:35ID:???何故原文も翻訳もそんなあいまいな表現をしたがるんだ
0536nobodyさん
2009/05/22(金) 21:15:21ID:???0537nobodyさん
2009/05/22(金) 23:04:55ID:???最短マッチとかで、十分知られてると思うんだが
0538nobodyさん
2009/05/22(金) 23:47:28ID:???0539nobodyさん
2009/05/23(土) 03:20:57ID:???0540nobodyさん
2009/05/23(土) 09:02:31ID:???ちなみにlazyと表す場合もあるらしい。'ものぐさ'はこっちから来てるようだね。
0541nobodyさん
2009/05/23(土) 19:55:34ID:???―を別のもの変えれば動くので、―に問題があるようです
\―にしてもできません
$cha =~ s/―/ /g;
0542nobodyさん
2009/05/23(土) 20:28:09ID:???0543nobodyさん
2009/05/23(土) 20:36:10ID:???0544nobodyさん
2009/05/23(土) 21:58:57ID:???やあ、弾先生のブログは読んでるかい?
いささか古いけど、Jcode.pmの代わりに使うぐらいなら丁度いいかもね。
http://blog.livedoor.jp/dankogai/archives/51031595.html
あとは、マニュアルを読んでほしい。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encoding.html
http://www.kt.rim.or.jp/~kbk/perl-5.8/encode.html
http://www.kt.rim.or.jp/~kbk/perl-5.8/open.html
http://www.kt.rim.or.jp/~kbk/perl-5.8/guess.html
0545nobodyさん
2009/05/24(日) 03:43:48ID:51A7n5Gq年の第何週という情報からその週が何月何日から何月何日かを求めたいのですが、
わかりません。 どうやって求めたらいいでしょう。
例えば、2009年第2週という情報からその週の初めの日である1/5
その週の最後の日である1/11を算出したいのですが・・(週は月曜始まり)
なかなか探しても見つかりません。
localtime,POSIXあたりを使ってできませんかね?
どなたかわかる方いましたらよろしくお願いします。
0546nobodyさん
2009/05/24(日) 04:01:51ID:???0547nobodyさん
2009/05/24(日) 14:21:03ID:???二次元配列の特定要素をjoinしたいんですが、
ベタに回して代入する以外の方法で、そういうことって可能でしょうか?
my $result;
my @array = (["id1", "name1"], ["id2", "name2"], ["id3", "name3"], ["id4", "name4"], ["id5", "name5"]);
#「,」でjoin後
$result ⇒ "id1,id2,id3,id4,id5"
0548nobodyさん
2009/05/24(日) 14:41:40ID:???0549nobodyさん
2009/05/24(日) 14:53:03ID:???ありがとうございます!
冷静に考えれば、内部的にはどっちにしろ回すんですね…
とりあえず下記のようにだいぶすっきりしました。
-------
my @aNotIn;
foreach (@$rItem) {
push @aNotIn, $$_{id};
}
$sNotIn = "AND (id NOT IN(".(join ',', @aNotIn)."))";
-------
↓
-------
$sNotIn = "AND (id NOT IN(".(join(',', (map($$_{id}, @$rItem))))."))";
-------
0550nobodyさん
2009/05/27(水) 18:17:04ID:???検索される文字が変数$moziに入っており
$mozi='ARTRYI';
検索キーワードが配列の一要素に入っている状態です
$keyword[0]='y'
$keyword[0]のyが$moziのYにマッチすればOKです
index関数ではindex($content,$keyword)とやっても大文字小文字が区別できないので-1が返されてしまいます。
正規表現でoptionのiを使う場合も変数展開できず失敗します。optionのeを使うことも考えましたが、これも置換のときのみに使えるようなので、マッチングでは使えません。
$mozi =~ /$keyword[0]/i
何かよい方法はないでしょうか
0551nobodyさん
2009/05/27(水) 18:24:55ID:???でよさそうな。
0552nobodyさん
2009/05/27(水) 18:30:36ID:???use strict;
use warnings;
printf "result:%d\n",index2('ARTRYI' , 'y');
sub index2 {$_[0] =~ /$_[1]/i ? length($`) : -1}
0553nobodyさん
2009/05/27(水) 18:33:50ID:???0554nobodyさん
2009/05/27(水) 22:42:22ID:???use warnings;
my $mozi = 'ARTRYI';
my @keyword = qw(y);
print ("position:", index(uc $mozi, uc $keyword[0]), "\n");
print ("position:", index(lc $mozi, lc $keyword[0]), "\n");
print (($mozi =~ /(?=$keyword[0])/gi ? ("position:", pos($mozi)) : "no match"), "\n");
0555nobodyさん
2009/05/28(木) 10:34:19ID:???>>379
>>386
の者なんですが、また質問させてください。
map { s/^\Q$erase\E\n$//; } @datalist;
の処理によって該当箇所は問題なく消去できているのですが、
「リストの最初の行だけが2度書き込まれる」という現象が起きているみたいなのです。
1240
985
766
みたいなリストから、1240を消した時、1240が消えている代わりに
985
766
766
のように最初の行が2度重なっている、という感じです。
何か考えられるミスはありますでしょうか。
0556nobodyさん
2009/05/28(木) 10:54:29ID:???0557555
2009/05/28(木) 11:05:47ID:???失礼しました。
0558nobodyさん
2009/05/28(木) 12:52:03ID:???もっと質問の仕方を学んでください
0559nobodyさん
2009/05/28(木) 13:13:18ID:???0560nobodyさん
2009/05/28(木) 15:45:21ID:???話はそれからだ
0561nobodyさん
2009/05/28(木) 20:50:21ID:IiL6Ub9rmacbook で ActivePerlする方法お願いします
0562nobodyさん
2009/05/28(木) 21:22:06ID:???ダウソしたら勝手にマウントするんで
ActivePerl-5.10.pkg
をダボクリク。
0563nobodyさん
2009/05/28(木) 22:53:03ID:???0564nobodyさん
2009/05/29(金) 02:01:40ID:???0565nobodyさん
2009/05/29(金) 02:57:59ID:???0566nobodyさん
2009/05/29(金) 17:59:48ID:???useとrequireどちらで読み込ませればいいのでしょうか?
今一違いがよくわかりません。
0567nobodyさん
2009/05/29(金) 18:09:51ID:???0568nobodyさん
2009/05/29(金) 18:20:24ID:???コードにエラーがあった場合、
Software error: ほげほげ
という出力がブラウザに出てしまうのですが、
これを抑制してInternal Server Error等を返すようするにはどうしたらよいのでしょうか。
0569nobodyさん
2009/05/29(金) 18:33:00ID:???0570568
2009/05/29(金) 18:38:59ID:???参考にしていた入門記事の
use CGI::Carp qw(fatalsToBrowser);
をのせいだったみたいです
お手数をおかけしました。
0571nobodyさん
2009/06/05(金) 03:14:34ID:N+0uLK7Z、HP上のある特定のテーブル(枠内)に画像をUPしたり、コメントを記入
できるようにしようとしております。枠は例えば一列を(名前・画像・
コメント)としてそれぞれの会員へ割り当てます。あくまでもその枠は、
割り当てられたメンバーしか入力と更新ができない仕組みにしたいと思いま
す。画面としては、HP枠テーブル内に設置されている「更新ボタン」を押す
→パスワード入力画面(認証)→画像UP/コメント記載入力フォーム→HPに
画像UP/コメント修正反映。という形です。パスワードは、会員それぞれが
違うPWをもっていて、他人の入力可能枠に入力をしようとしてもパスワード
が合わない限り、画像UP/コメント入力ができない形です。全般的に初心者と
いうこともあり、教えていただければ助かりますが、特に行き詰っているの
が
1.会員ごとにPWを割り振り、上記のように更新場所を分けた場合、認証
CGIは会員ごとそれぞれに作成する必要があるのでしょうか。それとも、こ
のPWで認証された会員はこの場所の更新を許可させるというような設定
はできるのでしょうか。
2.フォームで入力したデータを既存のhtml形式のhpに更新処理をする
ことは可能なのでしょうか。フォームで入力したデータを
掲示板(cgi)に書き込む事はできるようですが、htmlのテーブル(枠)に
書き込む事はできるのでしょうか。
3.フォーム(cgi)で入力したデータを指定した場所へ書き込むにはどう
したらよろしいのでしょうか。指定の方法はどうやればよろしいのでしょう
か
以上です。
0572nobodyさん
2009/06/05(金) 05:00:07ID:???複数ユーザーで使える画廊のようなページですかね
まだバイトの身なので見当違いなことを言ってるかもしれませんがアドバイスを。。。
1はCGI2つで実現できると思います。
例えば、画廊ページをhtmlで作り、認証フォームページ表示CGIを作り、実際の処理を認証CGIでするとします
画廊ページからは更新をクリックしたときに、認証フォームページ表示CGIに枠IDを渡します
認証フォームページ表示CGIでは、ユーザーID、ユーザーパスワードなど必要事項を入力する欄とともに、
このcgiに渡された枠IDを hidden 属性で渡せるフォームを出力します
これで3も解決です
認証CGI側ではあらかじめ枠IDとユーザーID・ユーザーパスワードを関連付けたデータを持っておき、
(多分選択肢はデータベースに入れるか他のファイルに書いておくかcgiに直書きかくらい)
フォームから渡ってきたデータと照合します
2の画像の更新については、画廊ページの雛形をまず用意しておき、(画像の入るところなどには{Image}のような仮の文字列を入れておく)
認証CGI側で読み込み本来の画像のurlなどに置換して出力します
こんな感じでいけるかと
こんな説明で分かりますかね?
0573nobodyさん
2009/06/05(金) 17:20:18ID:N+0uLK7Zのイメージはあっております。私が素人のため、ぱっと読んだだけでは、
よく分かりませんが、hidden属性等キーワードをいくつかいただきましたので、
少し、やり方などを調べてみます。また、分からないことがありましたらよろしく
お願いします。
0574nobodyさん
2009/06/06(土) 16:54:15ID:???\t区切りにして保存したdatファイルからデータを読み込む際に
foreachでハッシュに入れて$example{$hoge}{$huga}で読み込めばいいのか、
foreach+正規表現使ってdatから1行だけ抜き出すのがいいのか、どちらがいいやり方なのでしょうか。
0575nobodyさん
2009/06/06(土) 16:59:43ID:???0578nobodyさん
2009/06/06(土) 18:43:32ID:???grep って foreach みたいにメモリにがっつり読み込むの?
それとも While みたいに逐一読みに行ってくれるの?
0579nobodyさん
2009/06/06(土) 18:49:55ID:???0580nobodyさん
2009/06/06(土) 18:55:37ID:???0582nobodyさん
2009/06/06(土) 19:10:32ID:???フィルタみたいなものだから、がっつりメモリ取るよ。
つか、Perlは基本的に何でもリスト展開してから動くように出来てる。
foreachの昇順の範囲演算子は最適化されるけど。
0583nobodyさん
2009/06/07(日) 00:15:37ID:???端折りすぎた感のある文を読み取ってくれてありがとう
やっぱそうなってるんですね。
数メガならだいじょうだろうけど、十数メガ〜数十メガの TSV を扱うにあたって考えてるとこだったので。
やっぱ DB にプッシュしろってとこかな ^^;
0586nobodyさん
2009/06/07(日) 02:47:53ID:???鯖屋が気づいてないだけって可能性もあるな
美味しくいただいちゃいましょう
0587nobodyさん
2009/06/07(日) 13:52:57ID:???やりたいことは、@before = ('a', 'b', 'c')とう配列があったときに、
”この配列の要素”をkey、”その配列要素の場所”をvaluとしてハッシュを作ることです。
今はmapの外に$iを用意して下記の様にしています。
my @before = ('a', 'b', 'c');
my $i=-1;
my @after = map { ++$i => $_ } @before;
この$iを使わずに実現する方法があったら教えて欲しいです。
この$iがとれない様であれば、forでやった方がキレイかなと思ってしまいます。
0588nobodyさん
2009/06/07(日) 13:54:15ID:???× @after
○ %after
0589nobodyさん
2009/06/07(日) 14:03:51ID:???0593nobodyさん
2009/06/07(日) 15:09:57ID:???$after{$_} = $before[$_] for 0 .. $#before;
0594nobodyさん
2009/06/07(日) 16:38:29ID:???forwardメソッドで呼ばれるメソッドに
引数を渡す際に複数の変数を渡したいと思っています。
このときqw/$a $b/と書くと変数展開されませんし、
qq/$a $b/と書くと渡される値が"$aの中身 $bの中身"という1つの変数になってしまいます。
これを$a,$bそれぞれの値として渡すにはどのようにすればよろしいでしょうか?
0595nobodyさん
2009/06/07(日) 23:16:10ID:???sub foo : Private {
my $c = shift;
my $args = shift;
my $a = $args->[0];
my $b = $args->[1];
}
????
}
0596nobodyさん
2009/06/07(日) 23:23:24ID:???Test とか Class とかが知りたいです。
0597594
2009/06/07(日) 23:53:56ID:???その方法でうまくいきました。
ありがとうございました。
いろいろな形を試してみて、
( 'foo', [$a],[$b] )の形で動いたので
とりあえずこの方法でやっていこうかと思っていました。
0598nobodyさん
2009/06/08(月) 00:08:41ID:???そのまんま、cpanをby-moduleで見るのじゃあかんの?
ttp://www.cpan.org/modules/by-module/
それともこういう話?
ttp://d.hatena.ne.jp/yappo/20081010/1223630386
0599nobodyさん
2009/06/08(月) 00:39:27ID:???cpan.orgの方のページで解決しました。そんな便利なところがあると知りませんでしたorz
ありがとうございました。
0600nobodyさん
2009/06/08(月) 20:56:10ID:???例えば以下のようなハッシュの配列をソートしたいのですが、
my @member = (
{ 'name' => 'SUZUKI', 'point' => 80, 'pref' => 'TOKYO', 'flag' => '1'},
{ 'name' => 'TANAKA', 'point' => 100, 'pref' => 'OSAKA', 'flag' => '1' },
{ 'name' => 'SATOH', 'point' => 100, 'pref' => 'TOKYO', 'flag' => '0' },
);
1.ハッシュの'name'の値の昇順で配列をソートするにはどうすればよいでしょうか?
2.ハッシュの'flag'の昇順・'pref'の昇順で配列をソートするにはどうすればよいでしょうか?
3.ハッシュの'pref'の昇順・'point'の降順で配列をソートするにはどうすればよいでしょうか?
よろしくお願いします。
0601nobodyさん
2009/06/08(月) 21:13:22ID:???@member= sort{$a->{flag}<=>$b->{flag} || $a->{pref}cmp$b->{pref}}@member;
@member= sort{$a->{pref}cmp$b->{pref} || $b->{point}<=>$a->{point}}@member;
簡単な宿題だな
0603nobodyさん
2009/06/10(水) 20:00:53ID:???なぜかPerlのオートフラッシュが有効にならなくなってしまいました。
Debianをetchからlennyに変更したのでバージョン関係の
問題のような気もするのですが解決策が見つかりません…
何かご存じの方がいたら教えてください。
環境は下記のような感じです。
Debian/lenny Apache/2.2.9 mod_perl/2.0.4 Perl/v5.10.0
よろしくお願いします。
0604nobodyさん
2009/06/11(木) 04:02:08ID:???アップロードできる形式はgif、png、jpegで、
アップロードすると(ユーザーID).gifのような名前になります。
アイコンを更新する場合、アップロード前に
古いアイコンを削除する必要があるので、以下のように書きました。
opendir DIR, "./icon" || die("directory open error");
my @icons = readdir DIR;
@icons = grep $_ =~ /$id/, @icons;
closedir DIR || die("directory close error");
foreach my $icon (@icons) {
unlink "./icon/" . $icon;
}
ところが、これを実行したところ、プログラムがそこで止まってしまいます。
エラー等は吐かずにただ止まってしまうので、原因が分かりません。
$idとマッチするファイル名を@iconsに集めるまでは上手くいっているようなので
foreach以降に問題があるようですが、解決策がどうしても見つかりません。
どこに問題があるかご存知の方がいましたら、ご教示ください。
よろしくお願いします。
0605nobodyさん
2009/06/11(木) 08:20:11ID:???opendir DIR, "./icon" || die("directory open error");
while (my $icon = readdir DIR) {
unlink "./icon/" . $icon or die $! if /^$id\.(?:gif|png|jpe?g$)/i;
}
closedir DIR || die("directory close error");
ユーザー増えると遅くなるからディレクトリなめるやり方は良くないよ
0606nobodyさん
2009/06/11(木) 09:00:08ID:???メモリ使用量の問題はあるが。
opendir DIR, "./icon" || die("directory open error"); これと
opendir(DIR, "./icon" || die("directory open error")); これは
等価なので、括弧使って優先順位を変えるか、優先順位の低いorを使う。
あと、複数ファイルをまとめて消した方がサーバに優しいと思われ。
0607nobodyさん
2009/06/11(木) 10:11:35ID:???closedirに失敗してエラーで止まっているに100カノッサ。
実行時のカレントディレクトリの位置が期待したところと違うか
パーミッション関係かどっちかあたりかな。
0608nobodyさん
2009/06/11(木) 11:59:18ID:???書き直してて気が付いたことを。
ID の割り当てがどうなってるかわかりませんが、例えば ID が 60 って人がファイルをアップしたとしますよね?
600 の人も 6000 の人も 160 の人もファイルが上書きされたり、消されたりするので、そのマッチの仕方はやめた方がいいです。
またユーザーアイコンが1つしか無さそうなので、-e でファイルの有無を確認してから作業したほうがいいかと思います。
0610nobodyさん
2009/06/11(木) 12:17:45ID:???0612nobodyさん
2009/06/11(木) 12:19:39ID:???my $newicon; # ここに既に新しいファイルデータが入ってるとする
my $newfext; # 新しいファイルの拡張子
my $userid = 60;
# ファイル検索
my $userfname = '';
foreach (@fext){ $userfname = "./icon/$userid.$_" if -e "./icon/$userid.$_" }
# 仮出力
if(open(OUTFH, '>', "./tmp/$userfname.tmp")){
binmode OUFH;
print OUTFH $newicon;
close(OUTFH);
# 移動
move("./tmp/$userfname.tmp", "$userid.$newfext");
}
こんな感じか
0613nobodyさん
2009/06/11(木) 13:07:23ID:???その名前を $userid / 100 とかにするのも、運用回避としてはアリか。
0614nobodyさん
2009/06/11(木) 13:36:13ID:???my $complete = unlink(map{ "./icon/$id.$_" } qw(gif png jpg jpeg));
こんなでもいけるだろうけど。
0615604
2009/06/11(木) 14:30:45ID:???>>606さんのご指摘を受け、上記部分以外も含め open および close まわりは
すべて or に修正いたしました。
また、IDですが、アルファベット3文字+数字5文字の固定長にしており
ID発行時に重複もチェックしておりますので、
>>608さんのご指摘のようなIDマッチの重複はありません。
それでもまだ止まるので、もう少し止まる箇所を絞り込んでみたのですが、
どうもunlinkで止まっているようです。
unlinkで止まる原因にはどういったものが考えられますでしょうか。
0616nobodyさん
2009/06/11(木) 15:49:34ID:???0617nobodyさん
2009/06/11(木) 15:50:59ID:???「そんなにユーザー居ないし」でスクリプト組むのはやめたほうがいいですよ
0618nobodyさん
2009/06/11(木) 16:21:44ID:???だけにして実行するとかrm $fileでコマンドラインから
は消えるのかとかして原因の切り分けしろよ。
止まるなんて抽象的な表現じゃ分かんないだろ
0619nobodyさん
2009/06/11(木) 17:33:08ID:???読み込んだファイルの'key'という文字が出てくる次の行から
アウトプットさせたいんだが、うまくいかないです。
$flag = 0;
while($line = <IN1>){
chomp $line;
if($line =~ m/^key/){
$flag = 1;
print OUT1 $flag;
}
}
while($line){
if($flag == 1){
print OUT1 "$line\n";
}
}
みたいな感じで書いてみたんですが
if($line =~ m/key/)が認めらんねぇ、みたいなこと言われました。
どうしたらうまくいくか、教えてください。
0620nobodyさん
2009/06/11(木) 17:50:32ID:???0621nobodyさん
2009/06/11(木) 17:56:42ID:???while(my $line = <IN1>){
print OUT1 $line if $flag;
$flag = 1 if $line =~ /key/;
}
試してないけど、これでおk
0622nobodyさん
2009/06/11(木) 18:05:02ID:???行の終わりに全角スペースが入ってたから、それが原因だと思う。
全角スペースを可視化できるエディタを使うといいよ。
0624619
2009/06/11(木) 18:16:41ID:???皆、ありがとうございます。
>>621さんのプログラムで早速やってみたところ、なぜか
print OUT1 $line if $flag;
の行におかしなものがあるぜ、と言われて、動いてくれませんでした。
考えられる原因としては、何があるでしょうか?
unlinkがうまく動かなかったので、、、
unlink $file;
で済ませられるところを、、、
unlink $file unless -f $file;
と描いた記憶が蘇りました。
OS由来の変な誤動作とかかもしれないですね。
あと、単純にdiskがあやうすかも。
smartmontools等で確認するのも良いかも。
0628nobodyさん
2009/06/11(木) 20:10:41ID:???unlinkは、inodeの削除でつよ
> unlink $file unless -f $file;
ファイルが無いならunlinkって・・・
0629nobodyさん
2009/06/11(木) 20:23:23ID:???unlink $file if -e $file;
って書きたかったわけじゃなくて?
0631nobodyさん
2009/06/11(木) 21:56:39ID:???ネットワークドライブだったり不良セクタが発生してたりという事が多い。
0632604
2009/06/12(金) 02:45:55ID:???抽象的とのことですが、実際、CGIにフォームを送信するとそこから進まなくなってしまい
ブラウザを閉じるまで画面遷移も一切無く、エラー画面もログも表示されないという
文字通り「止まる」としか表現しようがない状態だったのです。
切り分け不足だったのはひとえに自分の力不足です。
その後、unlink $file or die $!;に記述を修正して実行したところ
以下のようなログが表示されました。
[error] [client ::1] Operation not permitted at huga line 122., referer: hoge
122行目はやはりunlink $file or die $!;です。
Operation not permittedを調べてみましたが、実行権に関するエラーのようですね。
もう少し実行権まわりを検証してみて、まだ動かないようでしたら
またお知恵を借りにくるかもしれません。勉強になりました。ありがとうございます。
0634nobodyさん
2009/06/12(金) 08:22:59ID:???unlink "./icon/" . $icon or die $!
って書いてあるじゃん。力不足とかいう話じゃなくて姿勢の問題。
他にもいっぱいアドバイス貰ってるのに相手に失礼だろ。
0635nobodyさん
2009/06/12(金) 11:12:28ID:???作成日時を変更することは出来ますか?
0636nobodyさん
2009/06/12(金) 11:19:41ID:???i領域書き換えないといけないわけだし
0637nobodyさん
2009/06/12(金) 11:38:04ID:???タイムスタンプ変更ソフトだと一括変更が多くて、
拡張子で分けたり条件で時刻だけ変更したり出来ないので
Perlでやりたいと思ったのですが残念です。
0638nobodyさん
2009/06/12(金) 11:43:59ID:???0639nobodyさん
2009/06/12(金) 13:20:19ID:???http://search.cpan.org/~wyant/Win32API-File-Time-0.006/lib/Win32API/File/Time.pm
0640604
2009/06/12(金) 14:18:45ID:???ごめんなさい。
>>605さんの発言を見て、
初めてunlink "./icon/" . $icon or die $!を試すことに気づきました。
それでやってみて初めてエラーログに表示されたので、
他の方のアドバイスもすべて見て参考にしつつ
自力でもなんとかしないと逆に失礼だと思って>>632のように書いたのです。
書き方等、不快にさせてしまって本当に申し訳ないです。ごめんなさい。
0641nobodyさん
2009/06/12(金) 16:46:11ID:???Windowsなので、>>639さんのリンクで解決しました!
ありがとうございました。
0642nobodyさん
2009/06/16(火) 12:04:02ID:???『2009.6.15.火』という文字列を
『2009/6/15-火』という状態に置き換えしたいです。
$hoge=~ s/./\//g で置き換え、
『2009/6/15/火』にしたあと一番最後の/を-に置き換えする事を考えていますが、
似たような処理が複数あるため、もっとシンプルに
『2009/6/15-火』に置き換えする方法をご教授頂ければ幸いです。
0644nobodyさん
2009/06/16(火) 12:29:59ID:???これでいいんじゃね
0645nobodyさん
2009/06/16(火) 12:36:28ID:???0646nobodyさん
2009/06/16(火) 12:42:00ID:???s/.(.*?).(.*?)./\/$1\/$2-/
0648nobodyさん
2009/06/16(火) 12:59:39ID:???じゃあこれでいいや
$hoge =~ s|『(.+).(.+).(.+).(.{1})』|『$1/$2/$3-$4』|;
あと、なんでみんな無理して/使うんだろ
0649nobodyさん
2009/06/16(火) 13:05:01ID:???これが妙に気になる
あとエスケープが面倒なときは {}!|# 辺りを見かけることのほうが多いよ
0650nobodyさん
2009/06/16(火) 13:14:08ID:???また聞き返されてそれの説明しなきゃいけないし
0652nobodyさん
2009/06/16(火) 14:34:08ID:???$str =~ s{(\d\d\d\d).(\d\d?).(\d\d?).(.)}{$1/$2/$3-$4}g;
>>644>>648さんに近いな。
0653nobodyさん
2009/06/16(火) 16:23:50ID:???$str = sprintf '%s/%s/%s-%s', split '.', $str;
これでいいだろ
汎用性も十分
0655nobodyさん
2009/06/16(火) 17:40:25ID:???0656nobodyさん
2009/06/16(火) 17:49:48ID:???0658nobodyさん
2009/06/16(火) 17:58:20ID:???特に今回なんかはセパレータが全角ピリオドだし見分けつかんよ
正規表現書くにしても二度手間とか思わず読みやすくして欲しい
0659nobodyさん
2009/06/16(火) 19:40:53ID:???0660nobodyさん
2009/06/16(火) 19:54:36ID:???処理の内容そのものを示すコメントって
あんまり良いコメントとは言えないのかもしれないけど。
0662660
2009/06/16(火) 23:17:31ID:???え? 何が?
0663nobodyさん
2009/06/16(火) 23:19:47ID:???人間を機械に近づける代わりにエッセンスで書ける
0665nobodyさん
2009/06/16(火) 23:53:35ID:???ぼく質問する側だもん
0666nobodyさん
2009/06/17(水) 00:46:18ID:???ハッシュのリファレンスかを知る上手い方法はありますでしょうか?
今考えているのはsprintfでリファレンスを書き出してみて
その文字列の中にHASH かARRAYのどちらがあるかでやろうかと考えています。
他におすすめの方法があればお願いします。
0668nobodyさん
2009/06/17(水) 00:54:57ID:???0669666
2009/06/17(水) 01:08:36ID:???ありがとうございます。
refの返り値がHASHかARRAYになってるんですね。。
リファレンスかどうかの真偽のみに使っていたので気がつきませんでした。
助かりました。
0670nobodyさん
2009/06/17(水) 01:55:06ID:???0671nobodyさん
2009/06/17(水) 18:23:12ID:???読み込んだデータ($sample)が120行ほどあって、
各行の先頭全てに’1−1’という文字列を放り込みたいんですが
全くプログラムが書けません。
どうか、教えてください。
0672nobodyさん
2009/06/17(水) 18:33:52ID:???0674nobodyさん
2009/06/17(水) 19:32:47ID:???0675nobodyさん
2009/06/17(水) 19:39:35ID:???0676nobodyさん
2009/06/17(水) 19:41:06ID:???0677671
2009/06/17(水) 19:54:39ID:???みなさん、ありがとうございます。
ばっちりできました。
が、初心者なんで皆さんのプログラムで
なぜちゃんと走ったのかが理解できてないので
出直してきますorz
0678nobodyさん
2009/06/18(木) 00:48:48ID:???0679nobodyさん
2009/06/18(木) 15:26:50ID:???@list = map(split(//, $_[0]), @csv);
@csv のすべての要素の最初の要素(文字列"am","au")を文字に分解したいのですがうまくいきません。
解決方法を教えてください。お願いします。
0681nobodyさん
2009/06/18(木) 18:06:39ID:???データの中にある特定の文字を消したいんですが、うまくいかないです。
while(<IN1>){
chomp;
@data = split(/-/, $_); #これは無視して下さい
@data2 = join(' ', @data);
という手続きで読み込んだデータをタブでつないで格納しましたが
都合上、全ての行に
red apple
red fire
てな感じで、タブで区切られずひとくくりにされてしまう箇所があります。
この中の"red "だけを全ての行から取り除いて残りをそのまま出力したいんですが
可能ですか?
初心者ながら置換をしてみようと
$data2 =~ s/Level1 //g
print OUT1 "$data2\n";
というプログラムを書いてみましたが、printできねーと返されましたorz
よろしくお願いします。
0682681
2009/06/18(木) 18:12:27ID:???下から4行目は
Level1 とか意味わからんのじゃなくて'red 'ですorz
0683nobodyさん
2009/06/18(木) 18:13:04ID:???0684681
2009/06/18(木) 18:29:39ID:???ホンマや!
と思って、;付け足してやってみたところ
今度はこのマッチングの表現がおかしいみたいなこと言われました。。
どこが間違ってるんでしょうか??
0686nobodyさん
2009/06/18(木) 18:35:41ID:???$str =~ s/ttp://www.*//;
みたいな感じに文字列に/使ってない?
0687nobodyさん
2009/06/18(木) 18:36:25ID:???該当行前後のソースも。
0688681
2009/06/18(木) 19:00:13ID:???redを空白に置換しようとしてるんで、文字列に使っちゃってることになるんですかね??
>>687
Use of uninitialized value in substitution (s///) at data_split line 15, <IN1> line 5788.
Use of uninitialized value in concatenation (.) or string at data_split line 16, <IN1> line 5788.
この2種類がガーっと出てきます。
ちなみにline15が$data2 =~ s/red //g;
line16がprint OUT1 "$data2\n";
です
0689nobodyさん
2009/06/18(木) 19:05:09ID:???0690nobodyさん
2009/06/18(木) 19:08:52ID:???そのエラーは$data2が未定義だと言っている。
681に書いてある付け加える前の元の部分には
@data2しか登場してないぞ。
0691nobodyさん
2009/06/18(木) 19:27:00ID:???redならそうはならないっす><
このエラー見る限り違う
つーかどういうフォーマットのデータをどういうフォーマットにしたいか教えてくれ
0692681
2009/06/18(木) 19:27:49ID:???そうだったんですか。。完全にわかってなかったです。
>>690
689さんが言うてるようにjoinが配列を返さないから
未定義だったんすね。。。
となると、、、
この"red "だけを消すにはどんな手が有効ですかね??
0693nobodyさん
2009/06/18(木) 19:39:03ID:???↓
どこかで設定したはず?→設定したはずの場所を正しく書き直す
↓
設定し忘れ?→設定すべき場所を考える
↓
わからない→とりあえず寝ちゃおう
0694nobodyさん
2009/06/18(木) 20:02:08ID:???strict
しておけ
0695nobodyさん
2009/06/18(木) 20:45:32ID:???ごめん言ってみただけ
0696681
2009/06/18(木) 20:59:17ID:???1 1 2 red fire 1232 0 [n]
みたいなのがざっと200行近くあって
この'red fire'がタブで区切れない、ひとくくりのデータになっちゃってます。
この中の'red'だけを一気にそぎ落とそうとしてる・・・って感じです
どうしたら良いですか??
0697nobodyさん
2009/06/18(木) 21:21:41ID:???my @tmp = $_ =~ /[^\t\n]+/g;
print join "\t", map{$tmp[$_] unless $_ == 3}(1..8);
}
こんな感じ?テストはしてない
0698nobodyさん
2009/06/18(木) 21:22:37ID:???O }(0..7);
0699nobodyさん
2009/06/18(木) 21:30:15ID:???$data2 =~ s/\bred\t//g;
$data2 =~ s/^red\t|(?<=\t)red\t|\tred\z//g;
$data2 = join("\t", grep{$_ ne 'red'} split(/\t/, $data2));
お好きなのをどうぞ。
0700681
2009/06/18(木) 22:01:42ID:???ありがとうございました。
せっかく教えてくれたのに申し訳ないですが、
やはり>>688と同じようなエラーが出てしまいました。
見つけれる限りの間違いは直してみたつもりなんですが。。。
while行から上に向かって
exit;
を入れてみてデバグしてみるとか。
あと~の文字コードとかとか。
0702681
2009/06/18(木) 23:16:28ID:???>>699さんの教えてくれた
$data2 =~ s/\bred\t//g;
が僕自身も一番わかりやすかったので使わせてもらってるんですが
エラーはこの文に対してだけ出てまして、その内容が
Use of uninitialized value in substitution (s///) at data_split line 13, <IN1> line 5788.
Use of uninitialized value in concatenation (.) or string at data_split line 15, <IN1> line 5788.
てな感じになってるんです。
ちなみに、line15は
print OUT1 "$data\n";
です。
文字コードも大丈夫なはずなんですが、、、
0703nobodyさん
2009/06/19(金) 00:34:12ID:???スクリプト全部晒せばいいのに。
0704nobodyさん
2009/06/19(金) 00:36:23ID:???0706nobodyさん
2009/06/19(金) 09:11:31ID:???0707nobodyさん
2009/06/19(金) 11:07:46ID:???0708nobodyさん
2009/06/19(金) 14:19:21ID:???威張ってはいない。
しょせんは他人事だがそれでも、いつまでも問題が解決しないことに
焦りと苛立ちと好奇心を感じている。
0709nobodyさん
2009/06/19(金) 14:48:13ID:???今、会員限定のサイトに電話番号 (ハイフン無し) によるログインをさせています。
家電話が無い人は携帯番号というふうにさせています。
認証自体は Basic 認証を使い、サイトの中で 「○○さん、こんにちわ」 といった具合で名前を表示させています。
(パスワードファイルは Shift_JIS、HTML は euc-jp です)
my $username; my $userid; my $usertel; my $userktai;
open(INFH, '<', $config->{'file_passwd'});
while(my $line = <INFH>){
my $utf8 = decode('shiftjis', $line);
my $eucjp = encode('euc-jp', $utf8);
chomp $line;
($userid, $username, undef, $usertel, $userktai) = split(/\t/, $eucjp);
$usertel = $userktai if !$usertel; # 家電話が無ければ携帯番号がユーザー名
last if $ENV{'REMOTE_USER'} eq $usertel;
}
close(INFH);
上記でスクリプトを書くと、家の電話番号がある人はちゃんと名前が表示されますが、携帯しか無い人を $usertel に代入させると判定できません。
ユーザー名がパスワード一覧のファイルに記述されているのは確認しています。
last if $ENV{'REMOTE_USER'} eq $usertel;
の行を
last if $ENV{'REMOTE_USER'} == $usertel;
にすると判定は上手くいき、理想どおりの動作はします。
しかしパスワードが 「数値」 というのになんか気持ち悪い感じがしますし、なぜ eq で判別できなくて == で判別できるのでしょうか?
書き方が悪いというのがあれば指摘していただきたく書き込みしました。
print によるデバッグでパスワードを出力させてみたところ、$ENV{'REMOTE_USER'} と $usertel が一致する行を目視で確認しました。
0710nobodyさん
2009/06/19(金) 15:03:10ID:???末尾に改行がある
きみは目視で改行が見えるか?
0711nobodyさん
2009/06/19(金) 15:17:48ID:???0712nobodyさん
2009/06/19(金) 15:21:58ID:???0713nobodyさん
2009/06/19(金) 15:44:33ID:???ありがとうございました m(._.)m
0714nobodyさん
2009/06/19(金) 16:29:20ID:???読み込むデータには
"animal"と"plant"と"food"の3種類がランダムに並んでます。
「animal
plant
food
food
animal」
というようなのが5000個近く並んでいます。
ここから、animalについては"n"、
他の2つについては"m"という文字を出力を出したいんですが、
perlを最近始めたばかりなので、全然できません。
助けてください。
のせるのも恥ずかしいぐらいですが、
とりあえず、稚拙ながらも作ったプログラムを置いておきます。
while($line = <IN1>){
chomp;
if($_ eq "animal"){
print OUT1 "n\n"
} else {
print OUT1 "m\n"
}
}
0715nobodyさん
2009/06/19(金) 16:41:44ID:???0716nobodyさん
2009/06/19(金) 16:43:49ID:???0717nobodyさん
2009/06/19(金) 16:45:21ID:???にしてみたらどう?
IN1 とか OUT1 を見て思うんだけど>>681や>>702に心当たりはないか?
0718nobodyさん
2009/06/19(金) 16:53:48ID:???いっけね。これだから初心者わw
>>716
いろんなことやってたらごっちゃになっちゃって
直すの忘れてました。
$lineに直してもムリポでした、、、
>>717
うまくいきませんでした。
て言うてもエラーではなく、出力は最初のデータがfoodなのにも関わらず"m"と出て糸冬了。
心当たり?はわかんないす。
0719nobodyさん
2009/06/19(金) 17:12:43ID:???food なら m であってるんじゃないの?
それだけで終了するのはなぜかわからないけど。
修正後のスクリプトを見てみたい。
0720nobodyさん
2009/06/19(金) 17:16:51ID:???> $lineに直してもムリポでした、、、
おおかたchompを直し忘れたんじゃないか。
$lineで統一するんなら明示的に引数書かないと。
> て言うてもエラーではなく、出力は最初のデータがfoodなのにも関わらず"m"と出て糸冬了。
> 心当たり?はわかんないす。
animalのときn,他のときはmだからfoodでmがでて
終了なら正しい動作なんじゃねーの?
0721713
2009/06/19(金) 17:17:06ID:???while(my $line = <DATA>){
chomp $line;
if($line eq "animal"){
print "n\n";
}else{
print "m\n";
}
}
exit;
__DATA__
animal
plant
food
food
animal
原因は、$line に入れてるのに、chomp は $_ 対して行ってるから。
自分と似たようなミスですねww
0722714
2009/06/19(金) 17:26:50ID:???>>718での報告は完全に間違ってたので、もう一度チャンスをください。
望ましい出力が
animalからのn と
plant, foodからのmです。
>>721さんのやつでやってみると
5000行ほどあるうちの最初がanimalなのにnが出てきまして、
その1つで出力が終わってしまってます。
ご教授、よろしくお願いします。
>>719
>>721さんのをまんま使わせてもらったところ
上に書いたような出力になっちゃいました。
0723714
2009/06/19(金) 17:28:42ID:???foodlなのにnが出ちゃったんですw
ほんますいません。
0724713
2009/06/19(金) 17:35:12ID:???while(my $line = <IN1>){
chomp $line;
if($line eq "animal"){
print OUT1 "n\n";
}else{
print OUT1 "m\n";
}
}
0725nobodyさん
2009/06/19(金) 17:36:48ID:???原因はきっとキミがパニクってるからだと思う
0727714
2009/06/19(金) 17:46:28ID:???あ、大丈夫です。そこは消したんですが
>>722みたいな感じになっちゃったんです・・
>>725
確かにw
今日中にこれを何とか片付けないとだめなんで若干の焦りがありますよねw
0728nobodyさん
2009/06/19(金) 17:54:53ID:???0729714
2009/06/19(金) 17:56:40ID:???while($line = <IN1>){
chomp $line;
if($line eq "animal"){
print OUT1 "n\n";
}else{
print OUT1 "m\n";
}
}
て感じです。
出力は、nが1つ出ているだけです。
しかも、データの1行目はfoodなのでmが出てほしいんですが。。
0730nobodyさん
2009/06/19(金) 18:02:04ID:???print OUT1 "n: $line\n";
print OUT1 "m: $line\n";
0731nobodyさん
2009/06/19(金) 18:03:50ID:???とりあえず、chompを外して
条件を
$line =~ /animal/
に変えて試してみれば?
あと、chompの後でも前でもいいけど、$lineをダンプ
0732719
2009/06/19(金) 18:06:13ID:???ファイルの open, close がうまくいってないとか?
# test.pl
use strict;
open IN1, '<', 'data_in.txt' or die $!;
open OUT1, '>', 'data_out.txt' or die $!;
while(my $line = <IN1>){
chomp $line;
if($line eq "animal"){
print OUT1 "n\n";
}else{
print OUT1 "m\n";
}
}
close OUT1;
close IN1;
# data_in.txt
food
animal
plant
food
animal
#data_out.txt
m
n
m
m
n
0733nobodyさん
2009/06/19(金) 18:13:59ID:???animal
なのか?
animal
とかじゃないよね?
0734nobodyさん
2009/06/19(金) 18:16:17ID:???その前後が間違えてるとしか思えない
スクリプトデータを頂戴
記述間違いから何から何まで直してやる
0735nobodyさん
2009/06/19(金) 18:28:26ID:???use warnings;
open IN1, '<', 'testdata.txt';
open OUT1, '>', 'results.txt';
while(my $line = <IN1>){
chomp $line;
if($line eq "animal"){
print OUT1 "n\n";
}else{
print OUT1 "m\n";
}
}
close OUT1;
close IN1;
5000個のデータ作ってやってみたけど、ちゃんと動くし、簡単なチェックスクリプトで確認したけど、
animal なのに m になってしまうなんてのは無かった。
キミの組み方の問題かと思われ。
0736714
2009/06/19(金) 18:30:29ID:???はい、一番処理しないといけないデータはanimalとかじゃなくて別の言葉です。
このanimalとかは、練習用で使ってたデータです。
下に生のデータを掲載させてもらいます。
>>734
スクリプトデータって読み込んだデータのことですよね?
animalとかじゃなくて、実際に処理したいデータはこんなのです。
NonWord
NonWord
NonScriptWord
NonScriptWord
NonWord
NonWord
NonWord
NonWord
ScriptA
ScriptC
こんなのが5000ほどあります。
この中のNonWordについてのみ"n"と返してほしいんです。
書いたプログラムは>>729から進歩してません。
0738714
2009/06/19(金) 18:56:47ID:???use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
use open IN => ":utf8";
use open OUT => ":utf8";
open(IN1, "<data_in.txt");
open(OUT1, ">data_out.txt");
while(my $line = <IN1>){
chomp $line;
if($line eq "NonWord"){
print OUT1 "n\n";
}else{
print OUT1 "m\n";
}
}
close(IN1);
close(OUT1);
これが全貌です。
やはり、生のデータの方を扱っても1行目のNonWordに対してmと出るだけです。
つまり出力はm一文字しか出てない状態です
0739nobodyさん
2009/06/19(金) 18:59:34ID:???まずUTF-8のBOM付きファイルかどうか確認しろよ
0740714
2009/06/19(金) 19:08:30ID:???今ツレに言われたんですが
「その作業、エクセルでできんじゃね?」て言われて、やってみたらできちゃいました。
たくさん協力してもらったのに、ほんと、すいません。
0741nobodyさん
2009/06/19(金) 19:10:25ID:???隠された部分が無ければの話だが。
0742nobodyさん
2009/06/20(土) 04:13:04ID:???全員初心者を自称しているわけだが(初心者質問スレだから当たり前ではあるが)、
すると恐らく、参考にした入門書・入門サイトも一緒なのだろう。
いったいどこが出自なんだろうな?
0743nobodyさん
2009/06/20(土) 08:57:48ID:???0744nobodyさん
2009/06/20(土) 09:08:58ID:???IN1 は5000行ばかしのファイルらしいしコードを見せたがらない
という入門サイトを参考にしてるんだろう
0745nobodyさん
2009/06/20(土) 22:26:45ID:???0746nobodyさん
2009/06/23(火) 11:24:34ID:???それをコピペして動かしたけど、ちゃんと動くよ
まだ隠してるトコあんじゃね?
それかデータファイルそのものを、どこかにアップしてみてよ
データファイルを見ないと、もう解決できんよ
0747nobodyさん
2009/06/24(水) 05:36:20ID:???もう終わった話なんだよ
落第すりゃいいのにね
0748nobodyさん
2009/06/24(水) 09:31:28ID:???0749nobodyさん
2009/06/24(水) 17:47:13ID:???以下のコードをApache2.2のlocalhostで実行すると
一度起動するたびに「てすと」と2回書き込みされてしまいます。
どうしてもコーディングにミスが見当たらないんですが
環境が悪いんでしょうか?
対処法ありましたら教えてください
#!/usr/bin/perl
use strict;
use encoding 'utf8',STDOUT=>'shift_jis';
open(ADD,">>",'./txt.txt') or die;
print ADD 'てすと'."\n";
close(ADD);
0750nobodyさん
2009/06/24(水) 17:59:03ID:???0751nobodyさん
2009/06/24(水) 18:01:30ID:???open(ADD,">./txt.txt") or die;
これでもだめ?
0752nobodyさん
2009/06/24(水) 18:07:19ID:???そうすると何度実行しても一行だけになります。
普通ですねw
ブラウザのキャッシュ消したり、プロクシ見直したりしてもだめでした。
httpd.confにも異常なしです。
最近デュアルディスプレイにしたんですけど関係ないですよねぇ
0753nobodyさん
2009/06/24(水) 18:22:10ID:???2回リクエストされてればブラウザが悪さしてる
そうやって可能性を推測していけ、サルじゃなければできる
0754nobodyさん
2009/06/24(水) 18:30:03ID:???0755nobodyさん
2009/06/24(水) 18:48:09ID:???Apacheのアクセスログも2重になってましたorz
3種類のブラウザで試しましたが同じでした。
どこら辺が悪いかわかるでしょうか?
>>754
そこら辺は省略してますが問題ない内容です。
ヘッダと少しのテキストをprintしてます。
0756nobodyさん
2009/06/24(水) 18:49:50ID:???0757nobodyさん
2009/06/24(水) 19:02:18ID:???ab -n 1 -c 1 http...
'ab'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
o...rz
今更ですがerror.log見たら
utf8フラグをprintしてるとか書いてありました。
ダメなんですか
0758nobodyさん
2009/06/24(水) 19:15:43ID:???ab の Path をフルで指定しれ
0759nobodyさん
2009/06/24(水) 19:16:47ID:???use open ':encoding(utf8)';
lwp-requestはある?
バージョンが古いと別の名前だったような気がするけど。
lwp-request -USe http://localhost/
こんな感じで。
0760nobodyさん
2009/06/24(水) 20:09:02ID:???やってみたら理想通り動きました。
>>759
こちらも理想通り動きました。
それと、よくわかりませんが
200 ok
だそうです。
apacheとPerl,Ruby,PHP入ってたんですが一度全部消してみました。
で、同じバージョンで再インストールして
Perlの事だけ考えて設定してみましたが変化なしです。
何度もすいませんがどうすればいいんでしょうか?
0761nobodyさん
2009/06/24(水) 20:37:38ID:???レスポンスヘッダの時刻に注目して。オプション付けると出てくるから。
スクリプトに warn('hoehoe'); とか書いといて。実行される度にエラーログに載るから。
それと、apacheのアクセスログ。
どのリクエストが、どうスクリプトを動かして、どのレスポンス出してるのか、
タイムスタンプで照らし合わせて見て。
一致するならapacheに問題ないから。
0762nobodyさん
2009/06/24(水) 20:39:58ID:???原因はその後のコードにありました。
全く関係ないと思ってたんですが
ヒアドキュメントで
print <<EOM;
ほにゃらら
<link rel="stylesheet" href="" type="text/css" />
ほげほげ
EOM
としてたんですが
上記のタグを削除したら直りました。
たぶんスタイルシートが読み込めなかったから
ブラウザが自動的にリロードしたんだとおもいます。
くだらないエラーですいません。ありがとうございました
0763nobodyさん
2009/06/24(水) 21:01:10ID:???0764nobodyさん
2009/06/24(水) 21:05:39ID:???0765nobodyさん
2009/06/24(水) 21:21:36ID:???0766nobodyさん
2009/06/24(水) 22:00:29ID:???プロ仕様
IE,Firefox
Fiddler Web Debugger - A free web debugging tool
http://www.fiddler2.com/fiddler2/
Firefoxのみ簡単仕様
Live HTTP Headers :: Firefox Add-ons
https://addons.mozilla.org/ja/firefox/addon/3829
ニコニコなど趣味に(
Proxomitron-J
http://www.pluto.dti.ne.jp/~tengu/proxomitron/
0769nobodyさん
2009/06/25(木) 02:01:15ID:???そこから全てのリクエスト(ヘッダやPOSTの中身、Javascript絡みの通信も)を
監視してるオレは、マイノリティなのかな・・・。
0770nobodyさん
2009/06/25(木) 03:30:59ID:???5.10以降、Windowsで使えるHTTP::Proxyが無いのが困り物。
CPANから拾ってもテストが通らないし。
0771nobodyさん
2009/06/25(木) 09:04:35ID:???0772nobodyさん
2009/06/25(木) 12:37:23ID:???6が出るまで5.8でいいわ
0773nobodyさん
2009/06/25(木) 12:45:53ID:???0774nobodyさん
2009/06/25(木) 14:05:24ID:???ところで // ってどんなときに使うん?
0775nobodyさん
2009/06/25(木) 14:38:37ID:???↓
my $d = $v || '';
↓
$v = 0 でも$d = '' になっちゃうじゃん
↓
my $d = $v // '';
0776nobodyさん
2009/06/25(木) 15:32:19ID:???値をリファレンスにして、サブルーチンに渡す。
あるいはサブルーチンで処理したデータをリファレンスで受け取った後に、
そのリファレンスの値が参照できない・・・ということはありますか?
0777nobodyさん
2009/06/25(木) 15:55:12ID:???0779nobodyさん
2009/06/25(木) 20:28:45ID:???フォームから「テストあいうえお日本語」等と送っても正常に処理出来るんですが
「テスト&」と送ると
Wide character in subroutine entry at C:/usr/lib/Encode.pm line 162
となりエラーになります。
「&」だけでは大丈夫なんですが「ト&」ではエラーになります。
デコード前に処理が必要なんでしょうか?
0780nobodyさん
2009/06/25(木) 21:15:06ID:???エスパーすると、decodeした文字列をもう一回decodeしてる。
0781nobodyさん
2009/06/25(木) 21:59:58ID:???見苦しいですが思いあたるとこはこの辺りです。
use Encode qw(from_to decode encode encode_utf8);
use open ':utf8';
use encoding 'utf8',STDOUT=>'shiftjis';
my %param = parse_form();
my $query;
if (exists $param{'query'}) {
$query = decode('shiftjis',$param{'query'});
#$query = $param{'query'};
}
0782nobodyさん
2009/06/25(木) 22:01:15ID:???my $buffer;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
my %param;
foreach (split(/&/,$buffer)) {
my ($name,$value) = split(/=/);
#form要素のname属性が/^[A-Za-z]+$/でなければ無視する
$name = uri_decode($name);
next unless $name =~ /^[A-Za-z]+$/;
$value = escape_string(uri_decode($value));
if (defined $param{$name}) {
my @values = sort((split(/\t/,$param{$name}),$value));
$param{$name} = join("\t",@values);
} else {
$param{$name} = $value;
}
}
0783nobodyさん
2009/06/25(木) 22:03:33ID:???my $string = shift;
$string =~ tr/+/ /;
$string = encode_utf8($string);
$string =~ s/%([0-9A-Fa-f]{2})/pack("H2",$1)/eg;
return $string;
}
sub escape_string {
my $string = shift;
$string =~ s/&/\&\;/g;
$string =~ s/"/\"\;/g;
$string =~ s/$string =~ s/>/\>\;/g;
$string =~ s/\t/\ /g;
$string =~ s/\r\n/\n/g;
$string =~ s/\r/\n/g;
return $string;
}
return %param;
}
0784nobodyさん
2009/06/25(木) 22:29:49ID:???0785nobodyさん
2009/06/25(木) 22:39:23ID:???ふだんはuse CGIしてるんですけど、
URIデコードの途中でutf8フラグを落とさないと
上手くいかなかったんで試行錯誤してます
具体的にやり方教えてもらえるならお願いします
0786nobodyさん
2009/06/26(金) 00:38:52ID:???use open ':utf8';
binmode(STDIN => ':raw');
binmode(STDOUT => ':encoding(Shift_JIS)');
use CGI qw(-utf8 :cgi);
my $cgi = CGI->new;
my $query = $cgi->param('query');
0788nobodyさん
2009/06/26(金) 02:22:48ID:???0789nobodyさん
2009/06/26(金) 08:18:46ID:???おお!ありがとうございます。
と思ってprintしてみたらデコードされてなかったorz
もうやだ文字コードめんどくさい。
もうutf-8駄目な環境は無視していいのかな?
0790nobodyさん
2009/06/26(金) 14:05:30ID:???0791nobodyさん
2009/06/26(金) 15:26:54ID:???STDINがutf8で、STDOUTがShift_JISで、コードがutf8なんだよね?
デコードされてなかったってのは、\x{0081}とかで表示される?
うーん、分からん。
でも、CGI.pmとencodingの相性が最悪なのは分かった。
0792nobodyさん
2009/06/26(金) 16:44:17ID:???使うのが今のところ確実かな。
0793nobodyさん
2009/06/26(金) 17:55:34ID:???>デコード
例えば「テスト&」と送ると
\x{fffd}e\x{fffd}X\x{fffd}g&
となりutf8::is_utf8はtrueになります。
まだ勉強しなきゃいけない部分が多く出て来たんで
対処のしようが無いorz
>>792
CGI.pmはインスタンス作った時点でデコードされてるんではないんですか?
てことは、paramを自前でデコードしても2重デコードになったりしないんですよね?
あれ?俺なんか変?
0794nobodyさん
2009/06/26(金) 18:07:24ID:???0795nobodyさん
2009/06/26(金) 18:21:09ID:???お勉強してきますw
いちおう全文ぅpしときます。
少なくともなにがしたいのかは分かると思います
お願いします
http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi?mode=downld&no=2167
0796nobodyさん
2009/06/26(金) 19:11:15ID:???use utf8;
use open ':utf8';
binmode(STDIN=>':raw');
binmode(STDOUT=>':encoding(Shift_JIS)');
use CGI qw(:cgi);
my $cgi = CGI->new;
my $query = decode 'Shift_JIS' => $cgi->param('query');
0797796
2009/06/26(金) 19:27:16ID:???ソース見て気になったけど、サブルーチン内でサブルーチンの定義はPerlではやめた方がいいよ。
0798nobodyさん
2009/06/26(金) 19:38:40ID:???ぅわぁぁぁぁ完璧です。
いままで何度も挫折したんですが初めて解決しました。
まじで感謝してもしきれないですw
>サブルーチン内でサブルーチン サブルーチンからサブルーチン呼ぶ場合はいつもそうしてました(汗
0799nobodyさん
2009/06/30(火) 17:03:31ID:???スクリプトを書こうと思ったんですが,mp4に格納されている
動画(コーデックはh.264)のサイズ(幅×高さ)を取得する方法って
ありますか?
MP4::Infoでイケルかと思ったら,これは動画サイズを取得できない
みたいなんですよ・・
ttp://search.cpan.org/~jhar/MP4-Info-1.12/Info.pm
0800nobodyさん
2009/06/30(火) 23:13:29ID:???0801799
2009/07/01(水) 02:27:40ID:???>mplayer
なるほど.一度外部のアプリを使って画像を生成して
それの大きさを取得するってことですかね?
ちょっとやってみます.
アドバイスありがとうございます.
パッケージマネージャーのほうはよくわかりませんでした.
0802nobodyさん
2009/07/01(水) 10:56:47ID:???0803nobodyさん
2009/07/01(水) 14:19:30ID:???ppm から Audio-Play-MPlayer っていうパッケージを入れて、
実行する CGI/pl と同じディレクトリに MPlayer を置いてください。
使い方は、、、がんばれw
書いてて思ったけど、自分は system() で起動して情報を取得してた気がするw
0804799
2009/07/02(木) 23:42:04ID:???継続してアドバイスありがとうございます。
自分でも色々試行錯誤した結果なんですが、
エンコで使うffmpegが入力する動画情報も返してくれることが
分かったので、そっちを使うことにしました。その結果、
my @out = `ffmpegのパス -i 動画ファイル名 2>&1`;
my ($width, $height);
foreach my $line(@out){
$line =~ /Stream .+ Video: .+ ([0-9]+)x([0-9]+), /;
if($1){
$width = $1;
$height = $2;
last;
}
}
print "$width x $height\n";
こんなかんじで取得することができました。
>>802-803さんや、見守って頂いたスレの皆様に感謝致します。
ありがとうございました。
0805nobodyさん
2009/07/03(金) 13:19:59ID:???やっぱりあるのね。
0806nobodyさん
2009/07/06(月) 17:16:31ID:???どれを採用すればいいのかって話は確立してる?
今のところ、すべての候補でdecodeして文字列長の短いものを採用しているんだけど
良い方法があるなら知りたい。
0807nobodyさん
2009/07/06(月) 17:21:04ID:???0809nobodyさん
2009/07/06(月) 18:28:01ID:???or って文字が入ってれば、最初に来たエンコードでやってみる
すごくあいまいだけど、それで済ましてる
0810nobodyさん
2009/07/06(月) 18:49:46ID:???use strict;
use Encode;
use Encode::Guess qw/euc-jp shiftjis/;
my @words = (
"\xE3\x83\xAF\xE3\x83\xB3", # UTF-8 "ワン"
"\xE6\x8E\x88\xE6\xA5\xAD", # UTF-8 "授業"
"\xE7\x86\xB1\xE3\x81\x84", # UTF-8 "熱い"
);
for my $word (@words) {
my $enc = Encode::Guess->guess( $word );
if( ref $enc ) {
print $enc->name,"\n";
} else {
print $enc,"\n";
}
}
結果は
shiftjis or utf8
shiftjis or utf8
utf8
0811nobodyさん
2009/07/06(月) 19:50:17ID:???0812nobodyさん
2009/07/06(月) 20:21:17ID:???0813nobodyさん
2009/07/06(月) 21:26:40ID:???・・・コストたけえよ。
0814nobodyさん
2009/07/11(土) 14:22:02ID:???arrayを期待して関数を実行する一般的は方法はどのようなものでしょうか?
スカラーを期待するときは print scalar any_func();
とscalarを使えばいける用ですが、arrayを期待するやり方が分かりません。
0815nobodyさん
2009/07/11(土) 14:27:11ID:???要素だけ欲しいなら [ func()]->[0] とか使ってる
もうちょっといい方法があるかもしんないけど
0816nobodyさん
2009/07/11(土) 14:43:15ID:???代入なら($x)= any_func();でいける
0817nobodyさん
2009/07/11(土) 14:57:08ID:???即レスありがとうございます。
any_func() のなかでwantarrayを使用しているのですが、
sub any_func {
my @a = (1, 2, 3);
my $s = 6;
return wantarry ? @a : $s;
}
print文のなかで使用するにはやはり一旦変数にとってからprintでしょうか。
print文のなかで直接any_func()を使用するとscalarのreturnが表示されて困ってました。
0819nobodyさん
2009/07/11(土) 16:34:37ID:???use warnings;
sub any_func {
my @a = (1, 2, 3);
my $s = 6;
return wantarray ? @a : $s;
}
print any_func();
wantarryをwantarrayに直しただけで、ちゃんと123が表示されるよ?
0821nobodyさん
2009/07/11(土) 19:46:53ID:???すみません。勘違いでした。printのなかで使用した場合arrayがかえってきました。
>>820
こんな指定の仕方もあるんですね。知らなかった。。
0822nobodyさん
2009/07/11(土) 22:23:13ID:???リストを返す関数からリストを得る為には、関数を「リストコンテキストで評価してやる」だけでよろしいです。
wantarray() の名の通り、array を want してやるだけ(ここは Perl 用語としては array でなく list と呼ぶべきだけれど)。
リストコンテキストの例としては、リスト代入(配列、ハッシュ、あるいはスカラー変数のリストに対する代入)、リストを取る関数の引数部などがそれにあたります。
print() は引数にリストを取る関数なので print の引数はリストコンテキストで評価されます。ですからこの場合、特別な仕掛けは要りません。
Perl の組込関数は、単項演算子として振舞ういくつかを除き、ほとんどが引数をフラットなリストとして扱います。
そのため scalar() はあっても、対となるはずの list() 組込関数は存在しません。(和ラクダ第3版v2 P.925 参照)
# ちなみに scalar() 自身は単項演算子として振舞う関数のひとつです。
0823nobodyさん
2009/07/16(木) 14:08:29ID:XeS/olXCサーバーはXREAを使っています。
MIME::Parser を使おうと思い、他の箇所は問題無いCGIファイル内に
use MIME::Parser;
という記述を入れると
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Head.pm line 119.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Head.pm line 120.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Head.pm line 143.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Entity.pm line 230.
Argument "2.00_01" isn't numeric in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.8/MIME/Entity.pm line 231.
というエラーが発生してしまいます。
これの回避方法をご教示ください。
よろしくお願いします。
0826nobodyさん
2009/07/21(火) 03:06:34ID:uwULaVdeCGIを作っているのですが、<input type="file" name="file">の扱いがよくわかりません。
ファイルが入力されているかいないかの判別を、definedで判別できるかと思ったのですが、
$cgi = new CGI;
if( defined( $cgi->param( "cgi"))) {}
これだと、いつもifの中にはいってしまいます。
わたしが謝ったコードを書いているのでしょうか?
今は、
if( 4 < length( $cgi->param( "cgi")))
で処理していますが、通常はどのような条件分岐を行うのでしょうか?
(上記の条件分岐は、ファイルをzipファイルをアップロード対象としているため、拡張子の分のファイル名を4文字と考えています。
0827nobodyさん
2009/07/21(火) 03:46:34ID:???ベターなチェック方法は
if( defined( $cgi->upload( "cgi"))) {}
です。
この方法ならファイル選択をせずテキストボックスに適当な文字を入力されたケースにも対応できます(偽が返る)。
0828nobodyさん
2009/07/21(火) 04:02:29ID:???それだと2回も uplodad メソッドが呼ばれるからなんか無駄な気分
if( defined( my $file = $cgi->upload("cgi") ) ){
print $file;
}
こんな感じのがよくね?
0829nobodyさん
2009/07/22(水) 23:40:08ID:???sample.zipのパスパードはtestです。ここまで書きました。
#!/usr/bin/perl
use strict;
my $zipfile = 'sample.zip';
my $pass = 'test';
0830nobodyさん
2009/07/22(水) 23:52:11ID:???my $unzip = "/usr/bin/unzip";
my $file = "$unzip -p -P $pass $zipfile |";
open my $fh, $file;
my @lines = <$fh>;
close $fh;
あとは@linesを書けばOK
0831nobodyさん
2009/07/23(木) 00:27:53ID:???0832nobodyさん
2009/07/23(木) 01:02:41ID:???勉強の為だとしたら質問するんじゃない
0833nobodyさん
2009/07/23(木) 08:23:53ID:???0834nobodyさん
2009/07/23(木) 10:26:53ID:???明記されてるし、IO::Uncompress::Unzipははっきりとは
書いてないけどパスワード与えるインタフェースがなさげ
なのでこちらも多分対応してない。
0835nobodyさん
2009/07/24(金) 22:10:31ID:???> 書いてないけどパスワード与えるインタフェースがなさげ
> なのでこちらも多分対応してない。
return $self->HeaderError("Encrypted content not supported")
if $gpFlag & (ZIP_GP_FLAG_ENCRYPTED_MASK|ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK);
そうみたいだね。
0836nobodyさん
2009/07/27(月) 11:10:44ID:???というコードがあるんですが、何をやっているのかわからないので教えてください。
・@{$foo} は何ですか?$fooでも@fooでもないのでわかりません。
・scalar(@{$foo}) は結局何をしているんでしょうか?
0837nobodyさん
2009/07/27(月) 11:30:52ID:???$fooというリファレンスを、デリファレンスしてる
> ・scalar(@{$foo}) は結局何をしているんでしょうか?
配列の要素数を得てる
スカラーコンテキスト。
my $count = @array;
ってやると、コンテキストで要素数が得られるのと同じ。
0838nobodyさん
2009/07/27(月) 11:42:52ID:???@{$foo}
と書くのも
@$foo
と書くのも一緒だから、覚えとくといいよ。むしろ後者で書く人の方が多い気がするから。
0839nobodyさん
2009/07/27(月) 11:46:28ID:???ありがとうございます。@{$foo}と@$fooは同じなんですね。
@{$foo}なんて書き方、初めてみたんですが、これどんなときにつかうんですか。@$fooだけでいいように思いました。
0840nobodyさん
2009/07/27(月) 12:21:05ID:???Perlはいろんな書き方出来る言語だから、そんなことでいちいち疑問に思ってたら前に進まないよ
というより、@{$foo}の方が丁寧な書き方っていう印象がある。
俺がそう思うということは、たぶん、オライリーのプログラミングPerlや初めてのPerlにはそう書いてあるはず。
0841nobodyさん
2009/07/27(月) 12:35:35ID:???あくまで @{...} が基本形。{} の中はリストリファレンスを返すものなら何でもいい。
@{ ['A'..'Z'] }
@{ $flag ? $bar : baz() }
@{ $foo[1] }
${ $quux }[1]
@{ $quux }[ 1..3 ]
@{"symbolic"} # 文字列ならシンボリックリファレンス
@{bareword} # トークンなら普通の変数
{} の中が単純なスカラー変数の場合は{}を*省略*できる (そして省略する人が多い)。
…と覚えた方が、後で悩まずに済むよ。
0842nobodyさん
2009/07/27(月) 12:39:54ID:???0843nobodyさん
2009/08/07(金) 10:07:16ID:???my $head = 0x00000000; #空の4バイト確保
print (pack( "V", $head) . "\n"); #挙動がおかしいのでちょっと出力してみた
しっかり消滅してるしw
どうしればいいですか。
0844nobodyさん
2009/08/07(金) 10:27:48ID:???よくわからんがhoge.plにそのまま書き込んで実行してみた。
% perl hoge.pl |hex
0x00000000: 00 00 00 00 0a - @@@@J
ちゃんと4バイトの0が出てるので書いてるとおりの動作だな。
これで不満ならどうやって確かめて何がおかしいと思ったのか説明
してもらわないと。
0845nobodyさん
2009/08/07(金) 10:42:44ID:???俺が勝手に使ってるテキストエディタ内の新タブに出力させてたら、エディタの問題だったみたいです。
プロンプト、ファイル出力、共に4バイトありました。
0846nobodyさん
2009/08/12(水) 14:33:18ID:???use CGI::Sendmail;
my %mail = (
To => 'you@2ch.net',
Cc => 'he@2ch.net',
Bcc => 'she@2ch.net',
From => 'me@2ch.net',
Name => "ひろゆき",
Subject => "こんにちは",
Body => <<EOL,
お元気ですか?
では、さようなら
EOL
"Sendmail-path" => "/usr/sbin/sendmail",
"Character-code" => "euc-jp",
);
if ( CGI::Sendmail->new(%mail)->send ) { print "送信完了" }
else { print "送信できませんでした" }
0847nobodyさん
2009/08/12(水) 16:40:16ID:???http://search.cpan.org/dist/MailTools/
http://search.cpan.org/~markov/MailTools-2.04/lib/Mail/Send.pod
http://search.cpan.org/search?m=module&q=Mail&s=1&n=100
0848nobodyさん
2009/08/12(水) 18:05:46ID:XtZqM+tgフォームで受け取った$pass(値はhoge)と
同じくフォームで受け取った$idをファイル名に含んだファイルの二行目をfile()で読み込んで
$data[1](値はhoge)に代入して
if($pass==$data[1]){
print"値は同じです".$pass"==".$data[1];
}
else{
print"値は違います".$pass"==".$data[1];
}
を実行すると
「値は違います hoge==hoge」
と表示されるのですが「値は同じです」と表示させるにはどうしたらいいですか?
0849nobodyさん
2009/08/12(水) 18:10:12ID:???0850nobodyさん
2009/08/12(水) 18:11:08ID:???0851nobodyさん
2009/08/12(水) 18:14:13ID:XtZqM+tg0853nobodyさん
2009/08/13(木) 20:16:07ID:CNJ7rD2pprintfと書きましょうと習ったんだけど
printでも普通に使えるよね?
昔は使えなかったの?
0855nobodyさん
2009/08/13(木) 21:09:54ID:???0856nobodyさん
2009/08/13(木) 22:41:36ID:???0857nobodyさん
2009/08/13(木) 22:44:43ID:???習った>>853は、全ての場合でと勝手に解釈したってことだろ
会話で生じる誤解としては良くある例
0858nobodyさん
2009/08/14(金) 01:16:04ID:???print と sprintf だけ使ってた
びっくらこいた
0859nobodyさん
2009/08/14(金) 01:26:28ID:???こんな書き方できたのか!?って
0860nobodyさん
2009/08/14(金) 02:07:28ID:???html表示するときのフォントをverdanaにしてるんですが
そうすると半角¥がバックスラッシュで表示されてうざいので
$hoge=~ s/\\/¥/ig;
としようと考えたのですが、すると今度は特定の日本語文字が
化けてしまいます
$hogeの中の英数記号だけを変換するにはどう書いたらよいでしょうか
0861860
2009/08/14(金) 02:12:28ID:???$hoge=~ s/\\/&yen/ig;
です
0862nobodyさん
2009/08/14(金) 02:53:12ID:???0864nobodyさん
2009/08/14(金) 14:02:57ID:dh+Y7m4lバイトコードで書く
\5Cの次にS-JISの2バイト目が来なかった場合のみ置換
0866nobodyさん
2009/08/15(土) 03:55:15ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
0867nobodyさん
2009/08/15(土) 11:58:25ID:???肯定の戻り読みを使って、単語の後と行の先頭のときのみを置換するようにしたらどうだろう?
$hoge =~ s/((?<=^)|(?<=[\x00-\x7F\xA1-\xDF])|(?<=[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]))\\/¥/g;
0869nobodyさん
2009/08/16(日) 14:53:02ID:???0870nobodyさん
2009/08/16(日) 15:29:10ID:???use Data::Dumper;
print @Data::Dumper::EXPORT; #=>Dumper
パスを文字列にしてアクセスする場合は、シンボリックリファレンスにするしかないですかね?
my $path = "Data::Dumper";
print @{$path."::EXPORT"}; #=>Dumper
0871nobodyさん
2009/08/16(日) 21:22:55ID:???0873nobodyさん
2009/08/17(月) 00:52:26ID:PDEfAFzM0874nobodyさん
2009/08/17(月) 01:29:56ID:???0876nobodyさん
2009/08/17(月) 02:18:26ID:???{ package $path; print @EXPORT}
package で変数使えるならいけそうだけど使えなかった記憶が…
0877nobodyさん
2009/08/17(月) 07:59:43ID:???前に一度そういうコード書いたことあるからわかる
0878nobodyさん
2009/08/17(月) 09:09:05ID:QR35H0tn0879nobodyさん
2009/08/18(火) 00:44:13ID:jmGn/Iui中身が空で返ってきます。URLは間違ってないのですが、考えられる原因は何かないでしょうか?
0881nobodyさん
2009/08/18(火) 01:17:01ID:???取りあえずこの中身見てみては?
0882nobodyさん
2009/08/18(火) 02:57:59ID:B/cB/Ta10884nobodyさん
2009/08/18(火) 12:26:05ID:???ありがちなのはUserAgentとかRefererとかCookieとかトークンで弾かれてるってパターンだな。
0885nobodyさん
2009/08/18(火) 12:34:15ID:???0886879
2009/08/18(火) 13:44:36ID:9U61OqMGこれで良いのしょうか?
my $request = HTTP::Request->new('GET',$url);
my $http = $request -> as_string();
print "$http";
GET http://headlines.yahoo.co.jp/rss/indonews_c_int.xml User-Agent: libwww-perl/5.830
>>880
よく分からないのですがどういうことでしょうか
また、はじかれるのを回避するにはどうすれば良いのでしょうか?
0887nobodyさん
2009/08/18(火) 14:25:27ID:???http://headlines.yahoo.co.jp/rss/indonews_c_int.xmlが取得したいなら、
LWP附属のGETコマンドで一発で取れるからどっかスクリプトに不具合があるんじゃ
ないかと思われ。
0888nobodyさん
2009/08/18(火) 16:40:28ID:???my $url = "http://headlines.yahoo.co.jp/rss/indonews_c_int.xml";
my $file = "./rss.xml";
my $rc = getstore($url, $file);
is_success($rc) or die status_message($rc);
こっちはこれでアクセスできてるけど。
これがダメなら、一度LWPのパッケージのバージョン上げてみて、
それでもダメなら別の角度からどうぞ。
それ以前に、ブラウザでアクセスできてるんかいな。
0889879
2009/08/18(火) 18:56:58ID:2nsUhaJf最後の行でサーバエラーが出ました…
またブラウザでアクセスは出来ます。
あとアップデートはrootでrpm -Uvh perl-libwww-perlを行って出来ませんでした。
間違いを指摘して貰えると助かります。
0890nobodyさん
2009/08/18(火) 20:17:49ID:???依存関係でcpan使いたくないのなら、別に/usr/localにソースからPerl突っ込んでみるとか。
ここまで来るとlynxかwget使って取得した方が早そうだけど。
0891879
2009/08/18(火) 22:21:49ID:2nsUhaJfcpanでinstall LWPとした所、LWP is up to date(5.830)となりました。
0892nobodyさん
2009/08/19(水) 01:47:46ID:1hmn0Zu+0893nobodyさん
2009/08/19(水) 09:37:51ID:???rpmで削除できないか?できないなら@INCから自力でLPW探して
LPWを手動で削除してもっかいcpanから入れてみろ。
0895nobodyさん
2009/08/19(水) 18:15:22ID:???perl+htmlで掲示板を作っています。PC・携帯共に基本的には正常動作するのですが、auの機種のみ
■html側(shift_jis)
<form action="bbs.cgi" method="post">
<textarea name="comment" rows=4 cols=30></textarea>
<input type=submit value=発言>
</form>
↓「あいうえお」と入力
■bbs.cgi(EUC_JP)
use CGI;
$query = CGI->new;
@params = $query->param();
foreach $param (@params) {
$in{$param} = $query->param($param);
}
↓
$in{comment}の中身は「??????????」
のような動作になってしまいます。
URLエンコード/デコードのせいかと思ったのですが、受け取り時点でこんな化け方をされるとどうすれば良いのやら……
何か解決法は無いでしょうか。
よろしくお願いいたします。
0896nobodyさん
2009/08/19(水) 21:20:51ID:???0897nobodyさん
2009/08/19(水) 22:50:25ID:???携帯向けコンテンツはShift_JIS/UTF8のどっちかで作っとくことをお勧めしとく。
0898nobodyさん
2009/08/19(水) 23:39:59ID:1hmn0Zu+全部、UTF-8で作ったら?
0899nobodyさん
2009/08/19(水) 23:48:54ID:???$in{comment}の中身は、shift_jisコードで「あいうえお」なのだから、この中身をeucに変換する必要があるでしょ。
変換するとき自動にすると誤作動するから、my $str = Jcode->new($str, "sjis")->euc; などと元のコードを指定するべし。
あと、ページを出力するときにcontent-typeヘッダにcharsetを指定するべし。
0900nobodyさん
2009/08/20(木) 00:51:47ID:???0902nobodyさん
2009/08/20(木) 05:47:30ID:???今PATH_INFOの汚染チェックでヌルバイト(%00等)があれば消去という処理を
したいんですが、なぜかマッチしてくれません
$PATH = shift;
$PATH =~ s/(\0|\x00|%00)//g;
POSTやGETでは上記の処理で消すことが出来たんですが
PATH_INFOの場合はやり方が違うのでしょうか?
ちなみにタグのサニタイジングは出来ました
0903nobodyさん
2009/08/20(木) 08:42:44ID:???サニタイズ脳乙。
つーかapacheだとNULLは受け付けてくれないんだが(Not Foundになる)。
PATH_INFOを16進ダンプとかしてみた?
0904nobodyさん
2009/08/20(木) 09:14:03ID:???あー
だからPCからだと404に飛んだんだ
test.cgi/test/%00/aaa/
でPATH_INFOを表示させた場合
PC→404エラー
携帯(au)→/test/
となりました
16進ダンプ…調べてきます
0905nobodyさん
2009/08/20(木) 10:52:18ID:???見れるならサーバーのログもみとくといい。
クライアントが蹴って単にサーバーまで届いてない可能性もある。
0906895
2009/08/20(木) 11:42:27ID:???1.EUC-JPとShift_JISの判定問題が疑われるので、両方sjisに揃えてみる
→揃えても$in{comment}の中身は「??????????」で変わらず。この判定問題ではない?
Jcode変換しても全く変わらないので、そもそも「??????????」はshift_jisコードですらなさそう。
2.Encode Guessの使用
→両方sjisに揃えたうえで実行してみましたが、「??????????」はasciiコードとのこと。(「??????????」そのものになっている?)
UTF-8での作成も試してみようと思います。
これで出来なかったら素直にPHPに行ってくる……
0907nobodyさん
2009/08/20(木) 15:40:09ID:???0908nobodyさん
2009/08/20(木) 23:15:50ID:???Encode関連と見た。SJISだと「あいうえお」は全部MSBが立ってるから、
UTF-8ではマップできない。で、?に置換される。
MSBの立ってないのが混じってる「01234」で試してみ?
「?」以外の文字が混ざるようならビンゴだ。
>>897
今のUAでcharset=を解釈しないものとかHTMLの文字コードと送られてくる
文字コードが食い違うものって残ってる?
>>899
Encode使えよ
0910nobodyさん
2009/08/21(金) 00:09:36ID:???> ■bbs.cgi(EUC_JP)
を見て反応して、
> ■html側(shift_jis)
を見逃してた。
なるほどEncode.pm絡みか。
0911nobodyさん
2009/08/21(金) 00:15:52ID:???CGI.pmって
URLデコードが失敗すると?になったような
use CGI;
use URI::Escape;
print CGI::unescape( uri_escape( 'あいうえお' ) );
とかで試してダメならCGI.pmのバージョン上げてみるとか
0912Name_Not_Found
2009/08/21(金) 00:52:35ID:nWh8czvG肝心な質問ですが、
検索ボタンと一緒に付随しているコンボボックス?の事についてですが、何か1つコンボボックスの中の項目を選択して検索ボタンを押した後、その選択したコンボボックスを残した状態で検索結果を表示させたいです。
ただ検索ボタンとコンボボックスの領域は別のhtmlになっていて、検索結果を表示するCGI側で、その検索ボタンとコンボボックスがあるhtmlを読む込みようになっています。
前の検索項目を残すようにすることは可能でしょうか?
よろしくお願いします。
0913nobodyさん
2009/08/21(金) 01:17:05ID:???0914nobodyさん
2009/08/21(金) 03:36:54ID:kHQe2rHZ0915Name_Not_Found
2009/08/21(金) 09:53:12ID:nWh8czvG宜しければ、やり方を教えてください。
0916nobodyさん
2009/08/21(金) 10:34:03ID:???LWP の使い方はここを見ておけば、大概は困ることないよ
っていうサイトはありますか?
0917nobodyさん
2009/08/21(金) 10:43:59ID:???どこで聞いていいのかわからないので適切なスレがあれば誘導お願いいたします。
たとえば下記のようなディレクトリ環境をサーバに上げた場合、
a1以下全ての属性を777にしようとffftpのソフトでやると一つずつしか変更できないようでした。
そこでDOSプロンプトからftpで入り
quote site chmod 777 a1
としたところうまくいったので、下記のように再帰オプションをつけたところエラーになりました。
quote site chmod -R 777 a1
ヘルプをみると引数が2とあったので、ここでのchmodにはオプションが使えないのだと思います。
a1/
|---b1/
| |---text.txt
|---b2/
| |---c1
| |---text.txt
|---b3/
telnetなどがサポートされていないサーバなのですが、再帰処理ができるソフトやコマンドはありますでしょうか。
0918nobodyさん
2009/08/21(金) 12:04:28ID:???http://search.cpan.org/dist/libwww-perl/lwptut.pod
http://search.cpan.org/dist/libwww-perl/lwpcook.pod
>>917
△▲ WebProg 初心者の質問 Part19 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1244038749/
0920nobodyさん
2009/08/21(金) 21:30:54ID:???まず html 側に独自タグを定義して、読み込んだときに置換すればいいかな
例えば
------- test.html -------
<form action="hoge.cgi" method="post">
<input name="nanka_no_flag" value="1"{checked} />
</form>
-------- test.cgi --------
$q = new CGI;
open FH, 'test.html';
print "Content-Type: text/html;\n\n";
while my $line(<FH>){
if($q->param('nanka_no_flag') == 1){
$line =~ s/{checked}/ checked="checked"/;
}
print $line;
}
こんな感じ?
ニュアンスが伝わればいいけど
あとはJavaScript使うとか
0921nobodyさん
2009/08/21(金) 21:32:25ID:???O <input type="radio" name="nanka_no_flag" value="1"{checked} />
orz
0922nobodyさん
2009/08/21(金) 22:04:09ID:???javascriptでセレクト値のクッキー食わせといて、javascriptで選択済みにするかぐらいか。
コンボボックスなら入力値を手入力できるだろうから、その辺もきちんと処理しないとね。
0923nobodyさん
2009/08/22(土) 01:27:58ID:R3OZ89h5そのshtmlページをサーバのロックでなくて、パスワードでアクセス制限したい。
なら素直に全部をトータルでcgi使えという声もあろうが、全部がスクリプトだと
レイアウト変更や更新が面倒。それに、一部iFrameなんかは楽だしね。
で、shtmlページを完全にアクセス制限する手はなんか内でスカイ?
0924nobodyさん
2009/08/22(土) 02:25:22ID:???0925Name_Not_Found
2009/08/22(土) 10:13:30ID:egsrQGCy早速それらの方法を真似て修正したいと思います。
またつまづいてしまったらきます。
ありがとうございました。
0926879
2009/08/22(土) 20:07:07ID:???何が原因でしょうか?今はもう無くなってしまったのでしょうか?
他のモジュールは通常通りインストールできます。
0928879
2009/08/23(日) 18:08:57ID:???他の許可してあるPCではis_successで成功するのですが、私のでは出来ません。
firefoxでプロキシなしでネットに繋ごうとすると繋がりません。
いろいろ試したのですがよく分からないので、考えられる原因を教えてください。
0929nobodyさん
2009/08/23(日) 18:14:27ID:???それってつまり、プロクシなしで正常に外部と通信出来てないってことじゃん。
それじゃあLWP云々の前に、そのPCで正常にアクセス出来るよう
設定見直すなり、会社(組織?)の管理者あたりに相談だな。
0930nobodyさん
2009/08/23(日) 18:16:42ID:???あぶねえ、同じようなこと投稿するところだったw
perlの問題じゃなさそうだし、直接そのPCを見ることのできる人に相談だろうな。
0931nobodyさん
2009/08/23(日) 19:12:32ID:dufUiF83コマンドプロンプトから
pingとtracerouteで接続状況を確認したら?
perlの問題じゃないと思ふ
0932nobodyさん
2009/08/24(月) 15:05:19ID:+a5IC9tF$aには1002が入ってて、$bには002001が入ってるはずだから、print "$a$b" ってすると1002002001となるはずが
1002
002001
と表示される、勝手に改行されている
chomp $aやchop $aしてみたけど、chompをやった結果は最初と変わらんし、chopをやると
100
002001
という結果になる
原因も対処法もわからない
ちなみに$a<>$bってやると
1002<>
002001
<>が上に来る不思議
0933nobodyさん
2009/08/24(月) 15:16:07ID:???パズルの問題でもつくっているのか?
変数毎に検証すれば何も難しくないと思うが。
$a = '1002';
$b = "\n002001";
これで、望み通りの結果だ。
print "$a$b"; # => 1002\n002001
print "$a<>$b"; # => 1002<>\n002001
chomp $a;
print "$a$b"; # => 1002\n002001
chop $a;
print "$a$b"; # => 100\n002001
0934nobodyさん
2009/08/24(月) 15:16:12ID:???変数にs/[\r\n\s]//g;を通してからprintしたら治ったり?
URI::Escape;してprint uri_escape($a,"\0-\377");とかして
変なコードはいってないか見てみたら?
0936nobodyさん
2009/08/24(月) 15:22:00ID:???「改行」は行の後につく、という固定観念なんだろう。
文字列というデータ列がターミナル上で「改行」として表示されている、
という概念に辿り着けていないんだろうな。
0938nobodyさん
2009/08/24(月) 15:33:51ID:+a5IC9tF$bも先頭も最後もいじってみたが解決しなかったぞ、俺を甘く見るな
934ためしてくるぞ、ためしてきてからレスしたほうがいいな
0939nobodyさん
2009/08/24(月) 15:36:12ID:???まあ、自分で検証してみなって。
>>933 の入力で、>>932の文章による結果は満たしている。
十分合理的で簡潔な解だと思う。
他の条件で異なる結果が得られるのなら、
それも示さなければ、他人には絶対理解できない。
0940nobodyさん
2009/08/24(月) 15:39:03ID:+a5IC9tF俺は何も悪いことしてない
俺も933は思いついたんだが、やはり無理でした
0941nobodyさん
2009/08/24(月) 15:42:03ID:???0942nobodyさん
2009/08/24(月) 15:48:02ID:+a5IC9tFまぁ、もうちょっと一人でなんとかしてみるわノシ
0943nobodyさん
2009/08/24(月) 15:53:13ID:???本当に「入っている」のならば、そのデータと eq で比較すればいいだろうに。
print "a is ok. " if $a eq '1002';
print "b is ok. " if $b eq '002001';
0944nobodyさん
2009/08/24(月) 16:00:52ID:???use URI::Escape;
print '$a = ', uri_escape($a,"\0-\377"), "\n";
print '$b = ', uri_escape($b,"\0-\377"), "\n";
0945nobodyさん
2009/08/24(月) 16:04:33ID:???print "$a$b";
print "$a$b";
print "-$a-$b-";
これで少しは問題の切り分けができるだろ。
俺は他の部分のケアレスミスと踏んでるがな。
0946nobodyさん
2009/08/24(月) 16:09:28ID:+a5IC9tFuri_escapeしたら$bの先頭に%0Aがでてきた
しかし対処の仕方は $b =~ s/%0A//; しか思いつかなかった
0949nobodyさん
2009/08/24(月) 17:03:32ID:???しかし、元の問題をそんな対症療法で逃げていいのか?という気がしますけど。
>>932 は unpack('H*', $a) での確認を覚えておくと手軽でいいかな。
0950nobodyさん
2009/08/24(月) 17:14:36ID:???tr/\r\n//dにしとけってこった。
Macだったり、Windowsのファイルで\nだけ取れて\rだけ
残っちゃったとかそういうオチだろ。
でだな、何であるはずのない改行が混じってんだよ?ってことなら、>>949の言うように
原因追求が次の課題だな。そういうのはほっとくとろくなことにならん。
0951nobodyさん
2009/08/24(月) 17:28:15ID:???Mac上で、WindowsのCRLFなファイルをCR区切りで分割した、という線が濃厚ですね。
Mac perlのそのへんの仕様までは詳しく知らないので、予想ですけど。
UNIXベースの最近のMacは、もうCRな改行コードじゃないらしい、とも聞いてますが、どうなんでしょうか?
0953nobodyさん
2009/08/24(月) 18:08:07ID:???http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
>>951
>UNIXベースの最近のMacは、もうCRな改行コードじゃないらしい
YES
他のUNIX系OS同様となっている
0954nobodyさん
2009/08/25(火) 08:52:45ID:???[本]
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perl5.005_03 のドキュメント: ... ← そろそろ不要?
日本語ドキュメント検索: ... ← 消滅につき削除。
Perldoc.perl.org: ... ← 「最新のドキュメント」と統合。
「ム板Perlスレより x of 2」の一行も要らないかな。少しずつ違ってきてるし。
0956nobodyさん
2009/08/25(火) 16:14:13ID:fNKwG09N0957nobodyさん
2009/08/25(火) 23:02:54ID:???MacOS Xなら、テキストエディットっていうアプリがある筈ですよ。
デフォルトだと文字コードは、Mac Japaneseていうshiftjis互換で
改行は、CRのみです。
しかし、コマンドラインツールなどが吐きだす改行はLFのみです。
目的に応じて変換しないと、分け判らん状態にww
0958nobodyさん
2009/08/25(火) 23:56:21ID:fNKwG09N0959nobodyさん
2009/08/26(水) 00:28:05ID:???0961nobodyさん
2009/08/26(水) 08:05:35ID:???0962nobodyさん
2009/08/26(水) 14:12:54ID:???それは、アプリの設定次第。
perlでコーディングするなら、文字コードはUTF8改行は、LFに
アプリ側で設定しましょうって事です。>MacOS X
0963nobodyさん
2009/08/26(水) 14:18:24ID:???perlが、吐き出す改行の事を言ってるならデフォルトで
¥n は、LF ですよ。
0964nobodyさん
2009/08/26(水) 19:55:07ID:uFgoj7x+エラーコード 500の表示がみっともないので、「print "Content-Type: text/html\n\n";」を追加したらエラーコードは表示されなくなりました。
なぜこの「print "Content-Type: text/html\n\n";」だけで、解消されたんでしょうか?
文字はブラウザに表示させてないのに。なぞです。
よろしくお願いします。
0965nobodyさん
2009/08/26(水) 20:36:23ID:???http://www.studyinghttp.net/cgi-bin/rfc.cgi?3875#Sec6.2
> レスポンスは、message-header と message-body で構成され、空行によって分けられる。
> message-header は一つ以上のヘッダフィールドを含む。 message-body は NULL でもよい。
> スクリプトは、文書レスポンス、ローカルリダイレクトレスポンス、あるいはクライアントリダイレクト
> (文書を伴っても良い) レスポンスのいずれかを返さなければならない。
仕様を満たさないままスクリプトが終了すれば 500 Internal Server Error になる。
CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
0966nobodyさん
2009/08/27(木) 00:12:50ID:???0967nobodyさん
2009/08/27(木) 00:35:39ID:???でいいんじゃないの?
0968nobodyさん
2009/08/27(木) 01:51:21ID:???えっ!?そうゆうことじゃない?
0969nobodyさん
2009/08/27(木) 05:16:47ID:???my $str = "...";
my $uri = uri_join((uri_split($str))[0..2], undef, undef);
0970nobodyさん
2009/08/27(木) 09:06:05ID:???>>968
マジレスしてみる。
それだとhttp://.../が抜ける上に、PATH_INFOが乗らんぞ。そーゆー時はREQUEST_URIが普通。
そんなのHTTP_HOSTとかで組み合わせられると思うだろ?shttpやhttpsスキームはCGIからは判別不能だったと思うぞ。
そもそも自URLしか拾えないし、ftp://..../とかmailto://....とかはCGI噛まないからダメポ。
0972nobodyさん
2009/08/27(木) 09:38:57ID:???で良いんじゃね
0973nobodyさん
2009/08/27(木) 19:11:36ID:lnXiS6J7push(@hoge,$&);
てあったんだけど、$&て何?
0974nobodyさん
2009/08/27(木) 19:46:22ID:???http://perldoc.perl.org/perlvar.html#$MATCH
0975nobodyさん
2009/08/27(木) 20:04:55ID:???ありがとう。
英文なのでわかったような判らないような。
正規表現にマッチする箇所”だけ”拾ってくれるって事でいいのかな?
とりあえず理解する糸口を教えてもらって感謝です
0976nobodyさん
2009/08/28(金) 04:55:41ID:???趣味ならいいけど仕事にするなら英語の勉強もしっかり
しといた方がいい。マニュアル読む程度ならTOEIC550点程度でいい。
読んでるうちになれる。
ただし海外のブログやニュースで情報収集したいなら750程度は欲しいかも。
0977nobodyさん
2009/08/28(金) 14:38:06ID:???0978nobodyさん
2009/08/29(土) 10:09:36ID:???0979nobodyさん
2009/08/29(土) 10:33:17ID:???もちろんウザイという意味で
0982nobodyさん
2009/08/31(月) 17:11:21ID:???最新のパターンマッチで成功した文字列(ただし当該ブロック中で、ブロックやeval()文
で隠れた部分のマッチは勘定に入れない)。
(覚え方:いくつかのエディターでの&のようなもの)この変数は呼び出し専用で当該ブ
ロックに対して動的なスコープを持ちます。
プログラムのどこかでこの変数を使用すると、全ての正規表現マッチにおいてかなりの
性能低下をもたらします。"BUGS"を参照してください。
これの代替として"@-"を参照してください。
0983nobodyさん
2009/08/31(月) 20:40:55ID:???横からすまないが、今まで知らなかったので勉強になった。
perldoc perlvar によると
$& is the same as "substr($var, $-[0], $+[0] - $-[0])"
らしいけど、$& と比較すると使いにくいね..
0984nobodyさん
2009/09/01(火) 06:56:19ID:???0985nobodyさん
2009/09/01(火) 20:00:21ID:???0986nobodyさん
2009/09/01(火) 21:03:00ID:jzXz2QoA本文(description)だけが取得できません。考えられる原因があれば教えてください。
何度も確認したのでケアレスミスはない(はず)です。
0988nobodyさん
2009/09/01(火) 23:11:45ID:???みたいなリンクってなんか名前ついてたと思うんだけど、なんて名前だか分かります?
CPANにモジュールがあった記憶があるのに、探そうにも名前が浮かんでこない。。。
0989nobodyさん
2009/09/01(火) 23:16:15ID:???ニュース毎のdescriptionは無いように見えるけど
0990988
2009/09/01(火) 23:18:52ID:???0991nobodyさん
2009/09/02(水) 00:08:39ID:???0992nobodyさん
2009/09/02(水) 11:27:48ID:???ありがとうございます。その様でした。
スレチなのですが、ニュース記事のRSSでdescriptionも配信されているサイトがあれば
教えてくれませんか。
ブログ記事でのdescriptionはありますが、ニュース記事だと見つからないので・・・
0993nobodyさん
2009/09/03(木) 11:25:23ID:???0995nobodyさん
2009/09/03(木) 12:40:28ID:???0996nobodyさん
2009/09/03(木) 21:34:21ID:???webprogは2日か3日だっけ?
0997nobodyさん
2009/09/03(木) 22:36:50ID:???0998nobodyさん
2009/09/03(木) 23:53:24ID:???http://pc11.2ch.net/test/read.cgi/php/1251989472/
0999nobodyさん
2009/09/04(金) 05:04:19ID:???1000nobodyさん
2009/09/04(金) 05:05:00ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。