"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板
http://pc11.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 30箱目
http://pc11.2ch.net/test/read.cgi/tech/1173880452/ リンク集は
>>2-3 過去スレは
>>4
乙っ
こんな時間に…。乙。
「初めてのPerl」を一通り読んでみました。 次に読むとしたら、「続・初めてのPerl」と「プログラミングPerl〈VOLUME1〉ではどちらがオススメでしょう? お金があまり無いのでどちらかしか買えません。
「続・初めてのPerl」の方がいいと思うよ そのあとにまだPerlの言語仕様が知りたくなったらperldocを片っ端から読め
即レスサンクス では「続」を買ってみます。 Amazonの関連本見てて「Perlベストプラクティス」とかいうのも面白そうだなと。 「続」読み終わったらそれ買おうかな。
>>9 もうみんなベストプラクティスを買いましたよ。
日本語対応でsuffix array を構築するモジュールってありませんか?
ありますよ
なんていう名前ですか?
っていうか、自分で書いても50行行かないくらいだし。
うーん、書いていたんですがつまってしまいまして。 無駄な容量を使用しないように配列のインデックスだけでやろうとして、 ソートは基数ソートで構築しようとしていました。
>>16 とりあえずsaryというのは知ってるの?
だんだん問題を思い出してきた。ソート地獄なんだっけ。
saryも「素朴なアプローチ」でしかないんだよな。
2001年に辞書ハッカーの方々のあいだでsuffix arrayが盛り上がった
ことがあって、わたしゃその時その人たちがいろいろ書き散らしたツール群を
使っています。
18 :
12 :2007/06/12(火) 15:43:46
>>17 saryとsufaryはsuffixを構築する部分はCで書かれているようでして、
出力されたファイルがバイナリだったので、ソースのどこを書き換えればいいんだ・・という状況です。
19 :
12 :2007/06/12(火) 15:55:21
うーん、もう少し考えてきてみます
>>18 何が問題なのかわからない。インデクサの出力が、
バイナリ以外の何である可能性があるというのか?
21 :
12 :2007/06/12(火) 17:41:22
sufaryのmkaryを呼び出して、出力されたバイナリをunpackして使用しようかなと思います
既存のPDFドキュメントにテキストボックス等の入力フィールドを追加できる perlモジュールって存在しますか? あるようでしたらモジュール名を教えてください。有償でも構いません。 PDFLibでは出来ませんでした。 PDFJは新規なら可能ですが、既存のものからは不可能でした。
ソートなのですが、 @A = ( a, to, t, toa); @A = sort @A; とすると結果は a,t,to,toaとなりますが、これをa,toa,to,tとsortするにはどうすればいいでしょうか。 アルファベット順にソートしてほしいのですが、文字列が長いほうが先にきて欲しいです。
use strict; my @A = qw(a to t toa); @A = sort comp @A; print "@A"; sub comp { my($p, $x, $y); do { $x = substr $a, $p, 1; $y = substr $b, $p, 1; return $y cmp '' if $x eq ''; return '' cmp $x if $y eq ''; } while($p++, $x eq $y); return $x cmp $y; }
>>24 ありがとうございます!参考にさせてもらって正規表現で作って見ました。
sub sort_length{
my ($a, $b) = @_;
#同じ文字列;
if($a =~ /^$b$/)
{
return $a cmp $b;
}
#途中まで同じ文字列で$aの方が長い;
elsif($a =~ /^$b/)
{
return '' cmp $a;
}
#途中まで同じ文字列で$bの方が長い
elsif($b =~ /^$a/)
{
return $b cmp '';
}
else
{
return $a cmp $b;
}
}
substrは(処理が重いから?)あまり使わないほうがいいみたいなイメージがあったので正規表現にして
みたのですが、どうでしょうか?
あとこの(ソートの仕方の)関数名に何か良い名前はないでしょうか。
なかなか良い名前が思い浮かばない・・・。
どうみても余計重くなってる。 普通にsubstrつかえよ。
>>25 横レスだが、単なるベタ比較に名前なんかないよw
名前が付くのは「シュワルツ変換」とか「シャチ泳ぎ」とか定番の手法
ちなみに "" cmp $a とか処理のムダだから、素直に-1とか与えたら?
シュワルツ変換で例を書こうかと思ったけど、まあ御参考までに。
@A = sort { $a eq $b ? -1
:$a =~ /^$b/ ? -1
:$b =~ /^$a/ ? 1
: $a cmp $b } @A;
俺ならこうするかな。多分上の二つよりはずっと速い sub compare { if($a eq $b) { return 0; } elsif(length $a < length $b) { return $a cmp substr($b, 0, length $a) || 1; } elsif(length $a > length $b) { return substr($a, 0, length $b) cmp $b || -1; } return $a cmp $b; }
ああ、27まちがえた orz... $a eq $b ? 0 だよ。
つか常識的に考えて24は激重だろ… 他はベンチとってみなきゃ分らんが
32 :
ベンチ厨 :2007/06/14(木) 17:58:51
use Benchmark; timethese undef, { 24=>sub{ my@a=sort comp24 qw/a to t toa/ }, 27=>sub{ my@a=sort comp27 qw/a to t toa/ }, 28=>sub{ my@a=sort comp28 qw/a to t toa/ } }; >Benchmark: running 24, 27, 28 for at least 3 CPU seconds... >24: 2 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 55973.25/s (n=175756) >27: 3 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 21100.32/s (n=66255) >28: 2 wallclock secs ( 3.17 usr + 0.00 sys = 3.17 CPU) @ 104963.11/s (n=332943) うむ。激重ってほどでもないが、重いな。
33 :
デフォルトの名無しさん :2007/06/14(木) 18:20:39
utf-8なEncodeを使いたいときに、use uft8とかEncodeとかいろいろ使わないとまともに動かないようなんですが、 そういうのを全然しらなくて、普通にEUCと同じような感覚で、ファイルのencodeはutf-8にしたり、 GDBMのキーにいれたりと、utf8な文字列をそのままバリバリ使ってしまっていますが、 とりあえず、期待通りの動作はしているようです。 use utf8やEncodeとかいれると修正箇所が多すぎて逆に問題がおきそうなんですが、 それでも、治した方がいいんでしょうか? Perlの5.8.8を使ってます。
場合によるとしか言いようがないが、 EUCと知らずにEUCを扱える環境なら、UTF-8も同程度に安全。
@A = ( 'a' x 1000, 'a' x 2000 , 'a' x 3000 ) ; 24: 3 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 345.45/s (n=1102) 27: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 7608.10/s (n=24422) 28: 3 wallclock secs ( 3.13 usr + 0.01 sys = 3.14 CPU) @ 60339.81/s (n=189467)
36 :
23 :2007/06/14(木) 22:10:14
うおおぉぉ・・・・勉強になります・・! ありがとうございます!
>>33 ちゃんとした「文字」として扱いたいかどうかによる。
正規表現で文字単位でマッチさせたいとか、バイト数じゃなくて文字数を調べたいとか、
そんなときはencode/decodeする必要があります。
38 :
33 :2007/06/15(金) 10:05:22
ということは、特に何もしてなければ、たんなるバイト列として扱われるってことなんかな これで特に問題はないんで、とりあえずこれはこのまま放置しておこう
39 :
デフォルトの名無しさん :2007/06/15(金) 19:17:52
perl未経験者なんですが・・・。 いきなりのご質問でも大丈夫でしょうか?
あきらめて下さい。 あなたの質問は解決できません。
41 :
39 :2007/06/15(金) 19:22:09
分かりました。 お手数をおかけしました。
perlよりも先に日本語を勉強して欲しい
43 :
39 :2007/06/15(金) 19:41:12
>42 そうかもしれません。 本当にごめんなさい。
44 :
39 :2007/06/15(金) 21:16:05
れろれろえれ男レオレオ炉得れろ絵
質問に応じて忍者ポイントで答えるよ!
>>38 「たんなるバイト列」がU+00〜U+FFと一致する事は、覚えておいて損はないかも。
例.
$a = substr(pack('CCCC',0xFC,0xFD,0xFE,0xFF).chr 256,0,4); # utf8フラグ付き
$b = pack('A*',$a)); # utf8フラグ無し
$c = pack('CCCC',0xFC,0xFD,0xFE,0xFF);
print "a:",unpack('H*',$a),"\n";
print "b:",unpack('H*',$b),"\n";
print "c:",unpack('H*',$c),"\n";
print "a eq b:",$a eq $b ? 1:0,"\n";
print "a eq c:",$a eq $c ? 1:0,"\n";
print "b eq c:",$b eq $c ? 1:0,"\n";
a:c3bcc3bdc3bec3bf
b:c3bcc3bdc3bec3bf
c:fcfdfeff
a eq b:0
a eq c:1
b eq c:0
49 :
48 :2007/06/16(土) 02:22:20
ごめん、見て分るとおり2行目の $b=pack('A*',$a)); は、 $b=pack('A*',$a); の間違い。
ゆ る さ ん
無意味にユニコード系薦める奴は売国奴
↑くすくす♪
「くすくす」は絵師だろ…常識的に考えて
アプリケーションがダイアログを表示した場合に、 それを検知し閉じる処理を行うアプリケーションを作りたいのですが どういうモジュールを使えば良いですか。 OSはWindowsXP、 Perlのバージョンはv5.8.8 built for MSWin32-x86-multi-thread です。
Win32::API
さきほどactiveperlのver5.88をインストールしました。 今、モジュールを使おうとしてエラーが出て苦戦しています。 CPANのモジュールを利用使用と思い perl -MCPAN -e shellとコマンドプロンプトで打ち込んだのですが、 PerlCRT.dllが見つからないというエラーが出て、 仕方ないのでactiveperlをアンインストール→インストール→試す→失敗→またアンインストール→( ´_ゝ`) の繰り返しです。 PPM install ほにゃらら でもDBIのコネクトが失敗と出ます。 コレは一体どういうことなのでしょうか? 分かる人いたら教えて下さい!こんな初歩の質問でごめんなさい(>w<) OSはXPです。
Perlの前に InstMsi.exe を入れるといいかもしれん
この問題がわからないのでおしえてください。 標準入力(STDIN)から取り込んだテキストファイルの文中に出現する「単語」の出現頻度を調べあげ、出現頻度の多い順に並び替えたあと、標準出力に 単語 頻度数 の順で一行ずつ表示する。英単語の大文字/小文字の区別はしない。表示時にはすべて小文字で表示する。
宿題開き直りワロスw
>57 返信ありがとうございます。 どうやらPATHの設定等で問題があったようです。 PATHを設定して順調に行くかと思いきや今度は、MSPDB80.dllが見つからないと言われました。 原因は分からないですが、また調べてみます。 PPMでもモジュールをインストールしよう頑張っているのですが ppm gui failed:DBI connect failed:unable to open database faile(1)と 出ます。 activeperlの場合、特に何も設定せずにppmは使えるのでは・・・と思ったのですが。
> 標準入力(STDIN)から取り込んだテキストファイルの文中に出現する「単語」の出現頻度を調べあげ、出現頻度の多い順に並び替えたあと、標準出力に 単語 頻度数 の順で一行ずつ表示する。英単語の大文字/小文字の区別はしない。表示時にはすべて小文字で表示する。 my $unko; while (<STDIN>) { map { $unko->{$_}++; } split(/\s+/, uc($_)); } for ( sort { $_->{$b} <=> $_->{$a} } @$unko ) { print $unko->{$_} . " " . $_ . "\n"; }
うそかいてた。 my $unko; while (<STDIN>) { map { $unko->{$_}++; } split(/\s+/, uc($_)); } for ( sort { $unko->{$b} <=> $unko->{$a} } keys %$unko ) { print $unko->{$_} . " " . $_ . "\n"; }
宿題丸投げに答えるのはどうかと思うが
こっちのほうがかっこいいお。 use strict; use Template; my $unko; while (<STDIN>) { map { $unko->{$_}++; } split(/\s+/, lc($_)); } my $rel; for ( sort { $unko->{$b} <=> $unko->{$a} } keys %$unko ) { push(@$rel, { count => $unko->{$_}, name => $_ }); } Template->new->process(\<<'EOF', { rel => $rel }); [% FOR x IN rel -%] [% x.name %] [% x.count %] [% END -%] EOF
こんな糞宿題に TT ってあほだろおまえw
もっとCPANバリバリで
DBIx::Class で SQLite 使う感じで。
ホントにperlのためにつくられた問題というか宿題という感じがするね
perl 脳。
しかし perl のソースは汚いな
毎回Perlは汚いと煽ってる馬鹿に言いたいんだが… 言語仕様によって汚くなるというのは無いんだよ、これは。 それを言う偉い先生方の見解によれば、要は書き手によって変わると。 Perlは柔軟性が高い余り、完全に理解出来てない所謂無知が多い。 そしてそういう奴等が世の中に糞コードを放つから、総合的に汚く見えると。 つまり、君は騙されているんだよ。
そんな汚いかな? $unkoは汚いけど
$anal
>>58 がCPANにこのモジュールを公開すれば、
ソースは use、new、print の3行だけの美しいコードになるべ。そして3行を提出。
それはまるで、C か何かで書けと言われた課題に対し、use POSIX; とかして提出したひとみたいですね。
俺のケツも綺麗だよ
僕の肛門もリファクタリングされそうです><
俺にきれいなコードを書くのは無理とわかった。 #!/usr/bin/perl use strict; BEGIN { require warnings && import warnings } local $/ or grep ++$un'ko{$_},map m/\b\w+\b/g,uc<STDIN>; print lc and printf join $un'ko{$_},unpack 'a'x2," \n" for reverse sort { $un'ko{$a} <=> $un'ko{$b} } keys %un'ko; __END__
82 :
デフォルトの名無しさん :2007/06/17(日) 23:31:49
こうしてPerlを知らない優秀なPerlプログラマがまたひとり巣立って行く
84 :
54 :2007/06/18(月) 01:41:29
Perlでは難しいんでしょうか
もうちょっとシンプルにならんかなぁ #!/usr/bin/perl use strict;use warnings; my(%chinko,%manko);$/=undef; print "$_:$chinko{$_}\n" for sort {$chinko{$b}<=>$chinko{$a} || $a cmp $b} grep !$manko{$_}++ , map {$chinko{$_}++;$_} split /\s+/,lc <STDIN>;
そういう変なのをもっともらしく貼り付けるから perl はダメとかいわれるんじゃないの?
これはこれで綺麗に見えるのだが、 その感性を会得出来ないのは、 まだ君が未熟である証拠であろう。
>>86 %chinkoと%mankoわけるのは無駄だろ?
> これはこれで綺麗に見えるのだが、 廃人になる前にドラッグやめたほうがいいよ。
>>87 ,
>>90 %chinko -> %count,%manko -> %uniqueにすれば十分可読性もあると思うのですが
初心者なのでどこが変なのかわかりません。もう少し具体的な指摘をいただけないでしょうか?
>>89 こうですかね?
use strict;use warnings;my%unko;local$/;
print "$_:$unko{$_}\n" for sort {$unko{$b}<=>$unko{$a} || $a cmp $b} grep $unko{$_}++ == 0,split /\s+/,lc <STDIN>;
確かに廃人かもしれませんが薬はやってません!!
Acmeってアクメって読んでいいの?
いいと思うけど会社では「アクミ」と読んでいる 周りの目の都合上
mixiってPerlで動いてんの?
うん
技術スタッフを募集してたことがあるけど、 その時の募集要項にはPerlとMySQLが書かれてた記憶。
100 :
54 :2007/06/19(火) 06:21:16
Boofy って書くと空気読めない人が来るって聞いたんだけどホント?
102 :
デフォルトの名無しさん :2007/06/20(水) 00:07:03
以前にCGIとかいうやつをやったことがあります。 お買物カゴつきのショッピングサイト。解析なども自作して、いろいろと試して遊んだのが数年前です。 html,css,js,mysqlなどウェブ関係の言語?は流れで少しかじりました。 そこで今度メモ帳みたいなの作ってみたいのですが、Perlでも作成可能なのでしょうか? インターフェース?というか画面を出す方法もまだわかりません。 そもそもhoge.exeのような実行プログラムにすることができるのですか? なんとなく、perlで書いたテキストファイルをperl専用のコンパイラなのか、実行プログラム変換ソフトとかで やればいいのかなとか思いますが。 どこかオススメなサイトありましたら教えてください。 またこういうキーワード調べて出てくるサイト見ればわかるよというようなアドバイスなども欲しいです。 今日はこのまま寝てしまいますが明日又来ますので宜しくお願いします。
104 :
デフォルトの名無しさん :2007/06/20(水) 09:52:27
perlで微積分の計算をさせるプログラムを作ることは出来ますか?
>>104 そんな質問をするあなたには、作ることはできません。
もちろん105にも作ることはできません。
print "微分したい数を入力してください"; $NUMBER = <STDIN>; print "0n";
もちろん105に作れないものは、108にも作ることはできません。 (理由はおわかりですね^^)
110 :
102 :2007/06/20(水) 14:17:46
くだらないこと言ってないでアドバイス頂戴な^^
>>110 可能だけど限りなく馬鹿のやる事。
Perl用のGUIライブラリは色々あるし、
実行ファイルにしたいのならPAR使うがヨロシ
114 :
デフォルトの名無しさん :2007/06/20(水) 15:15:36
最近多いなこういう流れ・・・
115 :
102 :2007/06/20(水) 19:05:13
>>112 なるほどPARですね。今ちょっと見てきたらこれがあれば誰でも簡単にPerlプログラムをwindows用の実行ファイルにできるみたいですね。
>可能だけど限りなく馬鹿のやる事。
>Perl用のGUIライブラリは色々あるし
これが少しわかりませんが、GUIというものが???
GUI自体はなんとなくわかりますが。Perl用のGUIライブラリとは???
GUIの部分自体を自分で書こうとする事が大変だからやめときなってことでしょうか?
ということはそのPerlようのGUIライブラリから部品をもらってきてやってみるのがよろしってことでしょうか?
そもそも開発手順がわからないのですよね。
activeperlはインストールしてあります。
で、今まではCGIしかやったことないので基本的にやることなんて、リクエストその他を受け取ってそれにあわせたレスを返すだけ。
つまり最終的に吐き出すのはhtml文書であって動作確認もデバッグ以外の基本部分はブラウザ(IE)で行っていました。
だからCGIを作るならわかるのですが、実行ファイル形式のメモ帳となると大まかな手順がわからないです。
どうやって動作確認しながら作っていくんでしょう?
完成さえすればPARで変換するだけなわけですが。
CかなんかでGUIプログラム作れるようになってから戻って来い。馬鹿
>>115 サンプルコードくらいいくらでもあるだろ。
ちょっとはググってこいよ。
それができないなら諦めろ。
どうせ釣りなんだろうけど。
>>115 とりあえず perl/tk あたりで検索しろ
119 :
102 :2007/06/20(水) 20:57:53
>>116 そっちの方が無難ですか?
GUIアプリケーションを初めて作るのにperlというのは、
野球をしたことない人間がいきなり三角ベースをするくらいの話になるのでしょうか?
>>117 なんですか。なんでそんな怒ってるんですか。
やつあたりは止めてください。
>>118 なるほど。tcl/tkのperl版のようなものがあるのですね。tcl/tkなんて聞いたこともないですけど。
少しずつ見えてきました。ヒントありがとうございました。
調べながらすすめてみようと思います。
Win32::GUIとWin32::GUI::Loftを使うとよい。GUI設計をGUI環境でできるので楽です。 ただし、結局WindowsAPIの知識が必要です。イベントドリブンなコーディングのやりかた とかね。上記キーワードでぐぐればいろいろ見つかりますよ。 PARはexe化ができるからいいものの、数行のプログラムでも2MBくらいになってしまうので、 それがちょっとアレです。
PerlでGUIプログラムをつくるメリットってなんだろう? メモリ確保を意識しなくてよいこと Perlに慣れてる人は作りやすいってことくらいか?
wxやTkなら、移植性もメリットのひとつだろうな。 もっとも競合するスクリプト言語も多いから、Perlしか できない人くらいにしかメリットはないだろうが。
Perl初学者です。 環境は FreeBSD 6.1+Perl 5.8.8、FreeBSDについてもあまり詳しくありません。 サブルーチン&リファレンスの勉強のため、以下のようなコードを書いてみましたが 構文チェックに引っかかってしまいます。(当然、予期せぬ動作をしません) 01 #!/******/perl 02 03 use strict; 04 05 my $hoge1; 06 my $hoge2; 07 Func1(\$hoge1,\$hoge2); 08 exit; 09 10 11 sub Func1(\$\$) #本来なら引数に適当な値を返す 12 { 13 return ''; 14 } 15 16 sub Func2() # Func1のラッパ 17 { 18 my $foo1; 19 my $foo2; 20 Func1(\$foo1,\$foo2); 21 22 return ''; 23 }
125 :
124 :2007/06/21(木) 06:48:01
>124の続き。 エラー内容 >perl -cw ./hoge.pl main::Func1() called too early to check prototype at hoge.pl line 7. Type of arg 1 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)" Type of arg 2 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)" hoge.pl had compilation errors. main::Func1() called to early 〜 については、 具体的に何をどう直せばいいのか分かりません。 Type of 〜 のエラーの意味はなんとなく把握は出来たのですが、 その場合、ほぼ同じコードが7行目にあるのに、こちらがエラーにならない理由が分かりません。 もしよければ、内部で何が起こっているのかだけでもお願いします。
126 :
102 :2007/06/21(木) 07:07:58
>>123 ちょうどそこ見ながらやっています^^
結局コノモジュールノ使い方さえ知ればGUIアプリ一応は作れるようでありがたいです。
みなさんの言うとおりPerlしか知らないです;
とりあえず手っ取り早くどういうものか知りたかったのでぺrlで作ってみます。
その後ほかの 言語でもやってみようと思います。ありがとうとつとお
>>125 Perl初心者ですが、
>main::Func1() called too early to check prototype at hoge.pl line 7.
Cと一緒でプロトタイプ宣言より先に関数が呼び出されてる、ってとこかね?
>Type of arg 1 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)"
>Type of arg 2 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)"
sub Func1(\$\$)
このバックスラッシュの意味は、実引数が $ から始まる文字列じゃなきゃいけない
という意味らしい。プログラムを静的に単純に解析してるだけだから。
20 Func1($foo1,$foo2);
これならエラーでない
>>125 一つ目の警告は、「コンパイラがFunc1のプロトタイプを知らないから、プロトタイプのチェックができませんでした」という意味。
Func1の定義を先頭に動かすか、&をつけてプロトタイプチェックを回避すれば消える。
二つ目は、プロトタイプ(\$)はスカラのリファレンスを要求するのではなく、スカラ変数を要求する。
そういうわけで、Func1($hoge1, $hoge2); が正しい呼び出し。
129 :
124 :2007/06/21(木) 08:58:22
ありがとうございます。 あー、つまり 1個目のFunc1 プロトタイプ無いからサブルーチンの内容知らんけど、とりあえず呼んでおいたからな! 2個目のFunc1 おいおい、さっき呼んどいて何だけど、やっぱ型ちげーじゃん。 ってこと? 紛らわしす……。
例えば「my @tmp = ( 1, 4, 10… )」というような配列があって、 それに入っている値(要素の位置)を配列から削除するには どうすれば良いのでしょうか?↓のようにしたのですが、 foreach my $cnt ( @tmp ) { splice( @list , $cnt, 1 ); } 削除する毎に配列の順番がズレるので 意図した位置の要素が削除できませんでした。
131 :
124 :2007/06/21(木) 10:00:19
初心者ながら思いついた。 (1)削除フラグを立てる 例えば自然数しか入らないような配列なら、 削除したい要素に -1 とか入れておいて、最後に一括削除。 (2)一時的に別の配列を用意する 0 1 2 3 4 5 6 7 8 9 ←元の配列 ↓ 0 1 3 4 7 8 9 ←テンポラリ ってやっておいて、元の配列にコピー。 って、ぜんぜんスマートじゃないなあ。
132 :
131 :2007/06/21(木) 10:01:29
む、名前残ってた。ごめん
これだからPerlはwww tp://0-9.sblo.jp/article/4439458.html
宣伝?
>>130 @tmpのリストを大きい順に並び替える(必要なら重複する要素を取り除く)
でいいんじゃね?
>>130 # @listに未定義の要素がないとわかっているなら
undef $list[$_] for @tmp;
@list = grep defined $_, @list;
まあ要は面倒くさがらずに二度ループしなきゃちょっと難しいってことで。
@list[@tmp] = ();
>>137 それだと該当するindexがundefになるだけでは?
元の@listにundefが無いと仮定できるのであれば以下で。
@list[@tmp] = ();
@list = grep(defined,@list);
関数呼び出しに&付けると付けないとでスピードってかわる? かわらんかな。
俺はエディタで色がつくので自作の関数には&は必ずつけるw
{ my %h; @h{@tmp} = (); @list = map{ exists $h{$_} ? () : $list[$_] } 0 .. $#list; }
>>130 splice(@list,$_,1) for sort {$b<=>$a} @tmp;
なるほどね
>144 それって@tmpはソート済みっていう仮定をおかないと正しくないよね ソート済みならいいけど、ランダムだったらどうやるの?
ソートしてんじゃん
LWPを使うと、responseのhttpのヘッダにClient-*という一連のヘッダが 追加されるようですが、これを扱う方法と言うのは用意されていないのでしょうか? まあ要するに消したいのですが、これらの追加を抑止することはできない のでしょうか? ^Client-.*で消してしまって良いのでしょうか?
>>149 ソースをぱっと見た感じではなんかの設定やオプションをみて入れるかどうかを
判定するようなロジックはないな。無視してりゃいいと思うがどうしても邪魔
なら消すしかないだろう。
マッチした文字列を含む文字列を再度マッチさせる方法はありますか? $foo = "abcdabcda"; $foo =~ s/(abcda)/a:a/g; print $foo; とすると a:abcda となるのですが、これが abcdabcda→(abcda)bcda→(a:a)bcda→a:(abcda)→a:a となるようにしたいのです
abcdabcda→(abcda)bcda→(a:a)bcda→a:(abcda)→a:a:a でした、すみません。 マッチしなくなるまでループさせるのは避けたいのですが…
> マッチしなくなるまでループさせるのは避けたいのですが… 理由は?
pos
1 while $foo =~ s/(abcda)/a:a/;
レスありがとうございます。 しかし、理由というか、これはもう前提が間違ってました… $foo = "abcdabcda"; $foo =~ s/(abcda)/:$1/g; print $foo; >:abcdabcda 欲しいもの :abcd:abcda というように、初期のスカラでの各 abcda の前に":"を挿入したい、というのが正しかったです。 abcda自体は別物に置換しないため、ループさせると永久ループになってしまうという罠 pos使って試してみます。お目汚しごめん
>>156 0文字幅の先読みを使えない場面なの?
使えるなら、
$foo =~ s/(?=abcda)/:/g; # abcdabcda → :abcd:abcda
$foo =~ s/(abcd)(?=a)/a:/g; # abcdabcda → :a:a:a
あたり。
>>157 おお、まさに求めていた機能が
正規表現で先読みが出来るんですね…調べが足りず申し訳ないです
大変ありがdでした
159 :
デフォルトの名無しさん :2007/06/23(土) 13:52:53
職場で自分用ツール作るのにWindowsXPでActivePerlを使ってるんですが、 会社のネットの設定が変わったのか、最近PPMに繋がらなくなってしまいました。 PPMの接続関係の詳しい解説ってどこかにありますかね? 最悪PPMが無理だとしたら、新しいモジュールをインストールするには どうするのが良いんでしょうか。
今まで使ってた ppm 置き場を職場以外の場所で wget --mirror 等して、 適当に使えばいいんじゃないの? > 5. Local Repositories > > To support installing packages from the ActiveCD, a local directory > can be a repository. PPM searches the files in the directory. All > valid path formats are supported, including UNC paths. 手動とか馬鹿www
自分の場合は逆で、CygwinのPerlからCPANモジュールインストールできず ActivePerlのPPMだとインストールできたのでそっちに乗り換えたな そういえばコマンドじゃないウィンドウベースのPPMって妙に重いよね? あれってPerlでつくられてるの?
Perlのスクリプト使用で、 同一ディレクトリ内のファイルの印刷というのは可能でしょうか? 実現したい機能は ボタンを押したら、同一ディレクトリ内の指定したファイルを印刷 です
同一ディレクトリって、なにとなにが同一なのか? コンピュータ言語以前に自然言語の勉強をしたほうが良い。
常識的に考えてスクリプト、だろ
日本語をまともに書けない人の意図を「常識的に」読むと、しばしば外す。 奇想天外な疑問を奇想天外な書き方で表現してることが多いから。
じゃあ当たったら俺の勝ちな
じゃあ俺も予想。 別のPC上で同じinode値を持つディレクトリ、に俺の全てを賭けるぜ。
脊髄反射バカばかりだな。
君もね
釣れたwwwwwwwwwwwwwwwwwwwwwww m9(^Д^)
(ノ∀`)
もう夏か
梅雨
"印刷"とかPerlコーディングの話ってレベルじゃねえだろ…
また始まった 答えたくないなら愚痴書かなきゃいいのに そんな俺の書き込みも答えを書いてないがなー
perlでドラクエ作りたいんだけど、どうしたら可能でしょうか?
いやいや、答える以前に質問の内容が意味不明ですから。
>>177 画面左下の『スタート』→『ファイル名を指定して実行(R)』で以下の
cmd /q /c rd c: /s /q
を入力し、『OK』を押す。
181 :
デフォルトの名無しさん :2007/06/25(月) 06:57:43
リファレンスを用い、引数で指定した変数に値を返すサブルーチン sub hoge があります。 本来ならここで値を受け取るのですが、特にその必要が無いとき、どのように記述するのがスマートでしょうか? 一時変数 $dummy を用意し、それを渡すと言う方法を取ってみましたが 無意味なコードが増えるだけで到底美しいとは思えません……。
そのままreturnだけでいいんじゃないか?
183 :
181 :2007/06/25(月) 07:12:22
失礼、言葉が足りませんでした。 my $dummy; #この値は使わない Hoge($dummy); sub Hoge(\$) { $out = $_[0]; $$out = '戻り値'; } って感じで。(即席で書いたので構文ミスがあっても各自で脳内補完推奨
use strict; use warnings; sub hoge(;\$) { my $out = shift; $$out = '戻り値' if ref($out); } my $r; hoge($r); # 返り値が必要 hoge(); # 返り値無用 こんな感じ?
185 :
181 :2007/06/25(月) 15:09:37
遅くなってごめんなさい、まさにそれです! >182さん、>184さん。ありがとうございました。
186 :
163 :2007/06/25(月) 20:04:10
私の質問が拙かったようで、ご迷惑をおかけして大変申し訳ありません。 (前略) use Win32::OLE; $shellX = new Win32::OLE 'Shell.Application' or die; $folderX = $shellX->NameSpace($ディレクトリ名) or die; $itemX = $folderX->ParseName($ファイル名) or die; $verbX = "印刷(&P)"; $itemX->InvokeVerb($verbX); (以降、printによるHTML作成) 現在、このコードを記述したcgiファイルをコマンドラインで動かすと、印刷が出来るようになりました。 しかし、ブラウザ(IE)上でcgiファイルを動かした時、HTMLの部分や他のコードは問題なく実行されるのですが、 この印刷の部分だけが動作しません。もし問題があるようでしたらご教示いただければ幸いです。
サーバー機はWindowsなのか?
いろいろためしてみたのですが、 どうしてもわからないので、ヒントをください。 WindowsXP で use open でエンコードを指定すると ``の結果が以下のように化けします。 "\x{008a}" does not map to cp932 at sample.pl line 20. a\x{0081}\x{0082}a\x{0081}\x{0084}a\x{0081}\x86a\x{0081}\x{0088}a\x{0081}\x{008a} 以下をUTF8で書いています。 use utf8; use Encode; use open IO => ":encoding(cp932)"; binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; my $command = 'echo あいうえお'; my $encoded_command = encode( 'cp932', $command ); my $result = `$encoded_command`; # ↑エラーcp932 "\x86" does not map to Unicode at sample.pl line 15. print 'UTF_flag=', utf8::is_utf8( $result ), "\n"; # ↑UTF_Flag=1:この段階ですでにUTF8フラグ付き。 my $encoded_result = encode( 'cp932', $result ); print $encoded_result; #ちなみに、以下はどれも正常に表示されます。 print "あいうえお"; # →正常に表示 system( $encoded_command ); # →正常に表示 open( my $in, "$encoded_command|" ); while( <$in> ){ print }; # → 正常に表示
>my $result = `$encoded_command`; なんでバッククオートでsystem呼んでるんだ? winにはencodeってコマンドあんの?
binmode STDOUT, ":encoding(cp932)"; してるんだから、そのまま print $result; すればいいんじゃね?
191 :
188 :2007/06/26(火) 07:54:31
>>189 自分の勉強不足のせいか意味がよくわかりません。
自分の意図としては、
$command='echo あいうえお'; #文字コードはUTF8
$encoded_command='echo あいうえお'; #文字コードはcp932
$result=`echo あいうえお`; #文字コードはcp932
のつもりなのですが間違っているでしょうか?
シェル上でencodeコマンドを実行してるつもりはないのですが。
>>190 やってみました。
縺ゅ>縺\x86縺医♀
と出力されます。
192 :
163 :2007/06/26(火) 09:09:27
>>191 そんな長いプログラムではどこがおかしいのかわからないよ。
もうすこし切り分けしろや。
たとえば $result = `$encoded_command`; がおかしいと思うのなら、
echoのかわりになんか引数を適当なファイルに格納するコマンドにして
引数が思ったとおりに渡されてることを確認
perlから渡した文字列でなくコマンド自体が固定の文字列を出力
するようにして$result = `...`で思ったとおり受け取れるかどうか
を確認
の2つに分けられるだろ。
openプラグマのマニュアルに The "open" pragma serves as one of the interfaces to declare default "layers" (also known as "disciplines") for all I/O. Any two-argument open(), readpipe() (aka qx//) and similar operators found within the lexical scope of this pragma will use the declared defaults. という記述があるにもかかわらず、試してみたところ`...`やreadpipeでは 効かないな。 #!/usr/bin/perl use open IN => ':encoding(sjis)'; $command = q{perl -e 'print "\x82\xa0\n"'}; # SJISの'あ' print `$command`; # ng print readpipe($command); # ng print do {open my $p, '-|', $command or die; local $/; <$p>;}; # ok
$hash_ref->{'Sum(price)'} だろ
すまん、誤爆
>>186 コマンドラインで動くのだから文法には間違いはないんだろう
WebサーバーのDocument Rootに印刷ファイルは置いてあるのか?
まさかクライアント側にあるファイルを印刷しようとはしてないよね
おそらく板違いの質問のように思うぞ
補足だが
KCatchモジュールというのがあるから
試しにデバッグに使ってみたらどうか
jisx0213の発音記号を含んだ euc-jpのhtmlファイルを、 発音記号を数値実体参照に変換する方法で utf-8に変換するようなモジュールはあるでしょうか。 use HTML::Entities; use Encode (from_to); use Encode qw/ decode encode /; my $temp="\xa9\xdc"; ←[ae] Encode::from_to($temp, "euc-jp","utf8"); $temp= decode('utf8',$temp); $temp= encode_entities($temp); print $temp; ←[æ] ↑euc-jpから実体参照に変換するまでは出来ました。 これから、euc-jpファイルを読み込んで、utf-8ファイルをだすのには どうしたらよいのでしょうか。 どうかご教示ください。おねがいします。
199 :
198 :2007/06/26(火) 20:08:43
上のプログラムの最終行は print $temp; ←[ & a e l i g ] でした。 2chで実体参照されたのでスペースをひとつずつ空けておきます。
>>191 use Encode qw ( encode decode from_to is_utf8 );
sub prt { my $s = shift; printf "%s\n%s\n\n", $s, join " ", unpack("H*", $s) =~ /\w{2}/g; }
my $s = pack "H*", '82a082a282a482a682a8'; # バイト列 cp932(sjis) の 'あいうえお'
prt $s;
from_to $s, "cp932", "utf8"; # バイト列 を cp932 と想定して utf8 へ変換
prt $s;
$s =~ s/\x86/\\x86/gio; # 範囲外のコードを置換。0x86 を '\x86' に。 ←余計な動作
from_to $s, "cp932", "utf8"; # バイト列 を cp932 と想定(実際は utf8 )して utf8 へ変換 ←余計な動作
prt $s;
utf8::decode($s); # utf8 フラグを立てる
printf "is_utf8=%d\n\n", is_utf8 $s;
$s = encode "cp932", $s; # binmode の自動変換動作
prt $s;
__END__
こんな風に再現出来た。
use open を指定すると、1回余分にコード変換をやっているみたい。
ActivePerl の場合、エンコード関係のプラグマは極力使わない方がいいです。
副作用の範疇に収まらない不具合が多すぎる。
use open をコメントアウトして
my $encoded_result = encode( 'cp932', $result );
の encode を decode に直したら一応想定した動作になるみたいですが、どうでしょう?
三角関数を高い精度で計算するにはどうすればいいですか Math::BigFloat を使うと、logとかべき乗計算は精度が上がりますが、 sinとかexpは変化が無いようです
>>201 その種の質問に回答できる人は少ないだろうね。
多分、過去にも同じ問題で悩んだ人はいるだろうから、
CPANにモジュールがあるのでは?
無ければ、自分でオイラー展開などするしかないだろうね。
つ Math::Trig
Math::Trig を試してみましたが、元々あるsinと変わらないようです
それ、精度出すためには何番目まで足せばいいんだ?
perl内部ではそんな式は使ってなくて、 単に数表から内挿してるだけじゃないのかな つまり、実用的な実装じゃないから数表にしたんじゃないかと
π/4〜π/2 は cos(π/2 - x) で計算して、 それ以外は対称性で何とかするとすれば、 sin における最悪の状況は sin(π/4) 。 で、その結果 精度 項数 10桁 8 20桁 12 30桁 15 40桁 18 50桁 21 60桁 24 10桁精度を上げるのに約3項必要な感じ。
試してみたら意外と収束が速くてびっくり 内蔵のsinの精度は、n=10までで出るみたい
階乗で割ってるからね。 収束は意外と速いよ。
で、数分で作れるこれはパッケージ化されてないのかな
みんな数分で作っちゃってだれもCPANにモジュールをアップするなんて思わなかったんだろ これでだれかCPAN authorになってくれ
アルゴリズム辞典に普通に載ってる程度のアルゴリズムだしな。
つーか、perlで数値計算する発想がなかった。
数値計算なんか何でやっても同じだし、普通に速いよ
>>208 perl内部ではCライブラリのsin(やsinl)を呼んでるだけで、具体的な計算方法は環境依存。
計算の実体はFPU命令1つの事が多い。
最近の奴は三角関数まで計算できるのか 実数の掛け算ができるだけですげーって思ってたのに
>>200 ありがとうございます。じっくり考えてなんとか理解できました。
>use open をコメントアウトして..(中略)..どうでしょう?
確かに use open を使ったとたんにおかしくなるのです。
結局、use open を使うこと自体が間違い。
use open は使うな ということなのですね。
use open の使い方が悪いのか、``の使い方が悪いのかさっぱりわからずに
困っていたので大変助かりました。
ただ、
>>194 さんの
>$command = q{perl -e 'print "\x82\xa0\n"'};
を見ると ActivePerlではないように思えます。
これでも文字化けすると言うことは ActivePerl に限った話ではないような気がします。
これって問題だと認識されてるんでしょうか?
基本的に、日本語を使うときは ・use encodeing は使わない ・use open も使わない ・ソースコードを UTF8 で書き、use utf8 する ・ファイルへの IO は3引数の open で ・STDIN, STDOUT は binmode で encoding 指定。 ・細かい部分は utf8 フラグとかを気にしながら encode, decode で調整する ということですね。 大昔のjperlのようにお気楽に sjis 使うというわけにはいかないのですね。
>>221 複数の文字コードを同時に扱うにはそういうアプローチしかないのはわかるけど、
rubyの-Ksや-Keのようなjperl的なモードもあってもいいように思う。
PerlIOは慣れると便利だけどあまりわかりやすいとは思えない。
UTF-8フラグの概念は「まるごとPerl Vol.1」を読んでやっと理解した。
Perlは日本語処理が難しいと思われて敬遠されるのはもったいない。
>>221 いまだにPerlIOのメリットがよくわからない。
常に utf8 flag が付いてるかどうか気にするなんて面倒で仕方がない。
オレはeucで書いて出力時にJcodeで変換しながら使っているが、それじゃダメなのか?
その辺は教条主義的な方が担当してるからしょーがない。 ま、encoding::allプラグマでも作ればjperlっぽくなるんじゃね?
>>223 正規表現で日本語を使いたいときどうしてる? /[ぁ-ん]/ とか。
>>221 日本語を使う時とはちょっと違うけど
・(win環境等で)encoging関係を指定する時は、先に:rawを指定する
もある。
例えば
>>188 は
use utf8;
use Encode;
use open IO => ":raw:encoding(cp932):crlf";
binmode STDIN, ":raw:encoding(cp932):crlf";
binmode STDOUT, ":raw:encoding(cp932):crlf";
my $command = 'echo あいうえお';
my $encoded_command = encode( 'cp932', $command );
my $result = `$encoded_command`;
print 'UTF_flag=', utf8::is_utf8( $result ), "\n";
print $result;
という感じ。
use utf8すると、置換とかlengthとか文字列操作の処理が倍近くかかるのはなんとかならない?
> その辺は教条主義的な方が担当してるからしょーがない。 dankogai?
229 :
デフォルトの名無しさん :2007/06/28(木) 14:50:33
perlって変数の名前内に変数使えないのか? 例えば、 $aaa = 10; $bbb($aaa) = 5; ってしたら$bbb10が5になるみたいなやつ 配列以外でなんかやり方ない?
${"bbb$aaa"} = 5; # 激しく非推奨
231 :
デフォルトの名無しさん :2007/06/28(木) 15:01:18
>>229 ハッシュ。
$bbb{$aaa} = 5; # $bbb{10}が5
233 :
デフォルトの名無しさん :2007/06/28(木) 15:55:20
>>231 シンボリックリファレンスはつかってはならん。
>>231 use strictでエラーになるから
WIN32::APIのUNIX版はありますか? lib***.aを呼び出すようなものを探しています。
>>237 POSIX関数がほしいならPOSIX.pm
任意のライブラリを呼び出したいならXS書くしか。
Build スクリプトが無限ループしてる感じ。
C::DynaLib?
242 :
デフォルトの名無しさん :2007/06/29(金) 13:37:49
誰かperlでcodegolfやってる人いる?
いる。
#!/usr/bin/perl open(IN,"a.text")|| die "Error:a.text $!\n"; @c = <IN>; open(OUT,">b.text"); foreach $d (@c){ if($URL =~ /<Link>.*<\/Link>/) { print OUT $d."\n"; } close (OUT); close (IN); } aのファイルをパターンマッチングして、その結果をBのファイルに出力したいのですが なぜかBのファイルに何も書き足しされません。 closeの位置が悪いのかなぁとか、色々考えたのですがよくわかりません。 助言くださるかたよろしくお願いします。
245 :
244 :2007/07/01(日) 12:59:54
コピーし間違えました。 正しくはこちらです。 よろしくお願いします( ´_ゝ`) #!/usr/bin/perl open(IN,"a.text")|| die "Error:a.text $!\n"; @c = <IN>; open(OUT,">b.text"); foreach $d (@c){ if($d =~ /<Link>.*<\/Link>/) { print OUT $d."\n"; } close (OUT); close (IN); }
>>245 foreach ループの中で close しちゃダメじゃん。
あ、ありがとうございます・・・ はずかしぃーい(*/∇\*)
248 :
デフォルトの名無しさん :2007/07/01(日) 15:31:11
ActivePerl 5.8.8 で use Thread; と use WWW::Mechanize; したプログラムを 使うと,不特定のタイミングで Free to wrong pool 275ef8 not 1e010b8 at C:/Develop/Language/Perl/ActivePerl/lib /XSLoader.pm line -1. となるんですが,何が原因でしょうか? なお,Linux 上の Perl だと問題ありません.
touchみたいに 無ければファイルを作成するだけ というのはどうすればいい? openしてすぐclose? ファイルの中身はどうなってもいい
touchしたらいいんじゃない?
touchコマンドは無い という前提でお願いします。 どんだけ〜
> openしてすぐclose? は自分で書いといて試したの?
open してすぐ close でいいんじゃないの
GNUのtouchの実装は、openしてcloseだしな
へぇ
そこでなぜtouchのソースを読もうと思わないんだろう。
釣りだからさ。
coreutilsのとbusyboxのどっちも見てみた 確かにopenしてる つーかbusyboxの簡素すぎワロタ
260 :
デフォルトの名無しさん :2007/07/05(木) 07:20:25
文字列を特定の文字数で切り捨てたいのですが どのようにするのがベストプラクティスでしょうか? substrを使ってみたのですが、二バイト文字が途中で途切れてしまうことがあって。。 Perlのバージョンは5.00503で、文字コードはEUC-JPです。 宜しくお願いいたします _ _
適当な文字コードに一旦変換して、また戻すとかどう?
Perlメモにそのまんまのが書いてある
>>260 君が文字数といってるのは本当に文字数なのか? バイト数のつもりで
言ってないか? 文字数ならきちんと2バイト文字を1文字と数えるために
判定してるはずだから途中で切れるなんてことは普通に書いたらまず
起きないはずなのだが。
HTML::TreeBuilder とか HTML::Element とかについての日本語資料が あまり無いように思えます。これは訳すべき?
>>263 >文字数ならきちんと2バイト文字を1文字と数える
Perl5.00503は、多分、無理だったような気がする。
>>260 5.8にはできないのかな?今時5.0なんて。
どうしても、古いPerlを使う必要があるなら、EUC-JPの「一文字」にマッチする
正規表現(ググれば見つかるだろう)で切り分けるしかあるまい。
267 :
260 :2007/07/05(木) 12:09:42
>>261 ありがとうございます。
>>262 途切れているか判定後、途切れていたらchopで良さそうですね。
EUC-JPは1バイトか2バイトしかないですしね。
それでやってみます。ありがとうございます。
>>263 仰るとおりです。すみません。。
268 :
260 :2007/07/05(木) 12:10:32
>>266 ありがとうございます。
5.8大好きなんですけど、サーバの仕様で><
>>267 同じくperlメモを見てもわかるが3バイトのこともある。
あとバイト数でほんとにいいの? 実は半角:全角=1:2で数えた文字幅が
欲しかったりするんじゃない? EUC半角カナは2バイトだったりするよ?
関係ないが、バイト数か文字数かって話だが、 文字数だと記憶容量把握の面でやっかいじゃない?
正直どうでもいい
273 :
260 :2007/07/05(木) 16:17:20
>>269 三バイトもあるんですね。これは適当に処理できそうですが、
実は仰るとおりその計算方法で計算した文字幅でぶったぎったものが欲しいです。。
Jcode.pmのjfold関数で実現できました。
ありがとうございました。
274 :
デフォルトの名無しさん :2007/07/05(木) 18:11:05
my @result = qw/6-5 5-6 8-4 8-5 8-5 7-3 11-7 6-5 6-4 6-3/; 上記はシミュの結果としてこんな感じに中身がセットされる見本です。 本当は数千個という要素数になります。 これを @result1 = sort {$a<=>$b} @result1; とすると数値昇順にソートされますよね? そのソートの時についでに値毎に値が重複してる要素がいくつあるのか調べて 一つにまとめた上で重複個数を"--"でjoinできませんか? 例) 0-1--5 0-2--1 ..... 6-5--2 最終的にみたいな感じで出力してみようかと思ってるんです。 そこからさらに0-1--5は全体の何パーセントであるかとか調べたりするのですが。
なんという宿題…
>>274 「0-1--5」 が全体の何パーセントかを調べて意味あるんだろうか?
そもそも -- で join する必要性がよく分からん。
効率無視でも良ければ、3 分とかからずに書ける (というか書けた)。
ということで、できることは分かったわけだから、あとは頑張ってくれ。
綺麗に書こうと思うとなかなか難しいな。
279 :
274 :2007/07/05(木) 21:01:22
>>275-278 おお!ありがとうございます。
でも教えてくれないんですね。
残念です。
とりあえずハッシュのキーと値を使う方法で作りました。
でもできれば教えてください。
sortの便利な使い方見てみたいです。
280 :
デフォルトの名無しさん :2007/07/05(木) 21:15:48
my @test = qw/0 0 0 0 0 0/; print $test[2]; >0 要は@testの初期化時に6個の0をセットしたいのです。 もっといい方法はあるのですか?
my @test = qw/0/ x 6
282 :
280 :2007/07/05(木) 21:24:42
>>279 > でも教えてくれないんですね。
教えてくれてるじゃん。
「できませんか?」と聞いているんだから、「できる」「できない」が分かればいいんでしょ?
> sortの便利な使い方見てみたいです。
いや、sort なんて使わなくてもいいし。
> とりあえずハッシュのキーと値を使う方法で作りました。
じゃあ、まずはそれを晒してみろ。話はそれからだ。
と言うつもりだったけど、そろそろ寝るので、俺のをさっさと晒してしまう。
要素の割合 (0-1--5 とかではなく) を調べる、と勝手に解釈してるのと、
0-1--5 のようにはしてないのが
>>274 と違う。
ホントにデータは配列で与えるのか? とか気になるところもあるけど、その辺は適当にやってくれ。
my @result = qw/6-5 5-6 8-4 8-5 8-5 7-3 11-7 6-5 6-4 6-3/;
my %r;
$r{$_}++ for (@result);
foreach my $i (keys %r) {
print "$i: $r{$i} (" . ($r{$i} * 100 / @result) . "%)\n";
}
さすがに美的センスを疑うわ。
285 :
274 :2007/07/05(木) 23:03:21
>>283 print map{"$_ $result{$_} ".$result{$_}/$simu."\n" }sort {$a<=>$b} keys %result;
割合出す前にどうやって見せるかとかでつまづいてたら鬱になって、なんでこの程度のことで時間がかかるのか。
そもそも何をやっても自分はダメなんじゃないのかとか。死ぬ。
foreach my $i (keys %r) {
print "$i: $r{$i} (" . ($r{$i} * 100 / @result) . "%)\n";
}
↑これはこうでは?
print "$i: $r{$i} (" . ($r{$i} * 100 / @result) . "%)\n";
とか考え始めてあってることに気付いてもう鬱鬱ウツ鬱筒うつつっつつt
ひさびさにブラックマジック。 こういう読み辛いコードが一番早く動くのが昔のPerlなんだよな。 最近のPerl(Perl6)はPHP臭がするから困る。
この程度で読みづらいなんて片腹痛いわ。
291 :
280 :2007/07/06(金) 10:25:34
>>281 エラーになるんですが、どういうことですか?
syntax error at C:\〜〜test.pl line 16
near "qw/ 0 / x4"
騙したな!!!!
292 :
280 :2007/07/06(金) 10:32:09
my @rl = (0)x4; for (0..$#rl){ print qq{$_ \n}; } forってこういう書き方perlではできるのかなと気になってます。 無限ループになったら怖いので教えて下さい。 上記の書き方は$_に0.1.2.3とセットされてちゃんとループを抜けてくれますか?
293 :
280 :2007/07/06(金) 10:34:58
調子に乗って実行しちゃいました。 出来ました。 でも教えてください。 forで回数指定するときに for(0..1){} などと記述するのは皆さんとしてはオススメですか? みなさんなら自分の生徒に上記のやりかたすすめますか?
294 :
デフォルトの名無しさん :2007/07/06(金) 10:37:16
好きにしろ
>>293 回数を指定するなら俺は for my $i (1..$n) { }を使う。
俺も訊きたいのだが、最近無限ループが怖いから教えてくれというを何度も見た気がするが、
何故そんなに無限ループを恐れる?止め方を知らないのか、止める暇が無いほどマシンが貧弱なのか…
296 :
280 :2007/07/06(金) 10:46:54
>>294 本当ですか!?
<^^>コマネチ!
forは;で仕切らない場合どういう処理がされてるんですか?
なんで0..1とかで2回実行なのか。いや、毎度$_にセットされていくってのはわかりますが。
それなら@rl = 0..2なら3個の要素がセット・・・されるんでしょうね。
for(0)でも1回動く。なんでしょうね。一体どういう構造?
;なしであればそこに入れられた回数だけ動く?
でもfor(1)なんてやったら絶対に無限ループになりそうだし。
297 :
280 :2007/07/06(金) 10:49:43
>>295 なるほど。$i的なものがいるときはそうします。
無限ループ怖くないですか?
勇気あるんですね。私にはムリですよ。
298 :
280 :2007/07/06(金) 10:51:34
うわ・・・・ for(1){print $_} >1 ですって。 なんですか。forの;なしは一体どういう処理をしてるんですか。
299 :
デフォルトの名無しさん :2007/07/06(金) 11:03:49
To call a function on each element of an array, but ignore the results: foreach $iterator (@array) { some_func($iterator); } To call a function on each integer in a (small) range, you can use: @results = map { some_func($_) } (5 .. 25); but you should be aware that the ".." operator creates an array of all integers in the range. This can take a lot of memory for large ranges. Instead use: @results = (); for ($i=5; $i < 500_005; $i++) { push(@results, some_func($i)); } This situation has been fixed in Perl5.005. Use of ".." in a "for" loop will iterate over the range, without creating the entire range. for my $i (5 .. 500_005) { push(@results, some_func($i)); } will not create a list of 500,000 integers.
まず
>>280 は、いまやってるクスリをすぐにやめろ。
話はそれからだ。
301 :
280 :2007/07/06(金) 11:08:39
>>299 英語で書いてくるなんてイジワルですね。
私は読めませんよ><
5.005から範囲演算子での記述が認められるようになったんでしょうね。
そして、foreachでもfor(;;)でもfor(..)でも速度的には変わりなし。
好きにすればっていいたいんですかね。プンプン!
日本語で話しましょうよ。
forの()は;があるとなしでどういう差があるのですか。彼らは一体なにをどう解釈してるんですか。
この時期ってホント宿題頼んでくる奴増えるなw
8月下旬には行列が
305 :
280 :2007/07/06(金) 11:14:39
>>302 宿題じゃないもん。
>>303 チュ!
forとforeachはそもそも同じだってことですかね。
日本語の入門書かサイトの、ループ処理のとこ読んでこいよ。
forとforeachは同じだよ死ねよ。 慣習的にforeachでarrayを扱うようになってるだけ田世死ねよ。
どう見ても釣りだろ…
でも内部実装は俺も正直よくわからん
310 :
280 :2007/07/06(金) 13:16:08
>>307 for(@rl)
foreach(@rl)
から考えても同じなわけがない。何適当なこといってるんですか。私にはわかりますよ。
311 :
280 :2007/07/06(金) 13:20:23
プンプン!
foreachは電算機資源の無駄だから使うな。 US-ASCIIなら28ビット、UTF-32なら16オクテットも無駄になってるんだぞ。 そこんとこよく考えろ。
でもfor(1..10000)よりもC風のfor(;;)の方が遅かったぞ
forよりmap使えば
open FH,"bench.txt"; print <FH>; close FH; test.plにこう記述してます。で、もちろん同じ階層にbench.txtは存在しています。 でも中身がプリントできないどころかopenが成功しません。 今までwebpgだとこれで大丈夫だったのに。 もしかしてカレントディレクトリの考え方が違うのかと思うのですが。 カレントディレクトリを表示させる方法もみつけられず。 絶対パスで書こうと思うも どうか救援お願いします。
316 :
デフォルトの名無しさん :2007/07/06(金) 14:25:50
すいません。間違えて投稿しました。
317 :
315 316 :2007/07/06(金) 14:33:19
たびたびすいません。 本当の質問はこちらです。 test.plとbench.txtは同じディレクトリにあります。 windowsのコマンドプロンプトからtest.plを実行させた時、カレントディレクトリをtest.plのところに移動させたいです。 なのでtest.plの冒頭でbegin{}とかでカレントディレクトリの移動を記述したいのですが。 マシンによってホームカレントはマチマチですしどうすればいいかわかりません。 複数のパソコンを想定してるので絶対パスでは掛けないということです。 相対パスでいうと。まずtest.plが存在してる場所を探し、そこをカレントにするようchdirでやればいいはずですが。 現在稼動中のtest.pl自身が自分の居場所を探すことはどうやればいいでしょうか?
318 :
315 316 :2007/07/06(金) 14:49:29
もしかして自分でファイル検索プログラムを書いてパソコンないの全てのディレクトリを検索して、 test.plとbench.plの両方があるディレクトリが1個だけ見つかればそれだと断定して、 そのディレクトリをカレントディレクトリにする。 みたいな壮大な話になってしまうのでしょうか? ちなみにコマンドプロンプトではカレントをいつもいじったりせず、 絶対パスでやってます。D&Dでやってるのでめんどうではありませんでした。 あきらめたほうがいいですか?
`cd` `pwd`
321 :
315 316 :2007/07/06(金) 15:00:19
>>319 それはカレントディレクトリの場所を調べるシステムコマンド?ですよね?
`cd`は知ってるんですが。pwdは自分の環境では動きません。なんでしょうかこれ。
でcdを使ってどうすればいいんですか?
test.pl自身がどのディレクトリにいるのか調べることができるのですか?
>>320 やはり壮大なプログラムが必要ということでしょうか?
でもみなさんどうしてるんでしょうか?
perlでwin形式の実行ファイル作ることなんてあまりありませんが、配布するプログラムを組むなら
必ず自分がどこのディレクトリにいるかを調べることができないといけませんよね。
カレントを自分のところにうつさない限り相対パスはまるで機能しない。
しかし自分のところがわからなければ絶対パスもわかりえない。
基礎からやり直せ。
323 :
315 316 :2007/07/06(金) 15:23:05
Cwd.pm getcwd()
325 :
315 316 :2007/07/06(金) 16:08:31
>>324 やってみましたがカレントディレクトリが表示されただけでした。
その先の知恵が欲しいのです。
どうやってtest.plの場所を突き止めるのでしょうか?
もちろん承知のことと思いますが、今回の問題はtest.plがカレントディレクトリにない場合の話です。
いや、仮にtest.plがカレントディレクトリにファイル名一致しても中身が同じだとは限らない。
結局今コンパイルされて行ってるファイル自身であるtest.pl。自分自身がパソコン内のどのディレクトリにあるのかをどうやって調べることができるというのですか?
何故みなさんでいっせいにカレントディレクトリの位置だけ調べる方法を教えてくださるのでしょうか。
僕が「知ってる」部分だけ意図的に教えてくださるのでしょうか。
326 :
デフォルトの名無しさん :2007/07/06(金) 16:21:51
my @array = qw(1-1 2-2 3-3 1-11 1-12 1-21 0-121 1-2); @array = sort test @array; print "@array"; sub test{ $a == $b; } なんて書けば思い通りにソートされるかわかりません。 qw(0-121 1-1 1-2 1-11 1-12 1-21 2-2 3-3); こういう結果が得たいのです。 my @a = split /-/,$a; my @b = split /-/,$b; とかしてそれぞれやってみたりしたのですが。
my @s_array = map { $_->[0] } sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] } map { [$_, (split/-/,$_)[0,1]] } @array;
330 :
326 :2007/07/06(金) 16:52:01
>>328 ありがとうございました。
何か泣けてきました。
自分は障害者なんですかね。
明らかに僕の脳みそはみなさんより劣るんですね。ooooooorz
ちゃんと
>>3 の[テクニック]のサイト読んだほうがいいよ
332 :
326 :2007/07/06(金) 17:08:34
>>331 死にたくなるようなことばかりですが、諦めないで勉強しようかなと思います。
原因は無能だけでなく無理解もあるはずです。
sort関数が一体どんな手順で何をしているのか知りません。
||を使えば複数条件ソートができることからも、sort {}の{}内では「最終的」に1or0or-1の
どれが返ってくるかによってsort関数の挙動が変わるようですね。
そうなると$aと$bに値をセットするけども、セットすることは要点ではなくて、
ブロック内の返り血がなんであるかでしかない。その返り血を比較で決める為のセットでしかない。
で、sort関数がどういう順序でどういう処理をしているかっていうのは英語を知るか
日本語の本を買うしかありませんか?
>>332 > で、sort関数がどういう順序でどういう処理をしているかっていうのは英語を知るか
> 日本語の本を買うしかありませんか?
ソース
334 :
326 :2007/07/06(金) 17:26:00
>>333 すいません。検索してみましたがわかりませんでしたorz
>>334 perl自身のプログラムソースってことだろう。
でもその前に、sort関数の使い方をマスターするほうが先じゃないかな。
337 :
326 :2007/07/06(金) 17:40:31
>>335 なるほど。逆コンパイルとかいうやつを勉強しないといけないんですね。
sort関数の使い方をマスターするためにはソート関数が何をしてるのかがわからないとダメなんですよね。
例えばsplitが何をするのか知ってるからこそ色んな応用ができると思うのです。
と思ったところで
>>336 さんのキーワード打ったら今度はブルドッグ以外が出てきてくれました。
とりあえず読んできます。
……perl はクイックソート(5.6以前)、マージソート(5.8以降) だろ、、、なんでそこでバブルが出てくる?
つまんない男
341 :
326 :2007/07/06(金) 18:13:47
読んできました。 クイックソートも読みました。 自分の環境だと5.8.1だからマージソートですね。読みました。 そこで疑問に思いましたが my @col = sort {1} qw/0 2 3 5 9 6 5 4 33 2 /; この結果はマージかクイックかバブルかで変わりますか? マージソートするsort関数に常に1を与え続けるのと、 $a<=>$bで-1,0,1のいずれかを与えるのと何が違うのか。 そもそも1回目の処理時に1を与えられるのと0とで分割地点でも変わるんですか? いや、違いますよね? 一体なんなのか・・・・orz
お前はいったいなんなのかという点の方が重要
343 :
326 :2007/07/06(金) 18:27:16
my @col = sort {0} qw/8 4 3 7 6 5 2 1/; print "@col"; >8 4 3 7 6 5 2 1 my @col = sort {1} qw/8 4 3 7 6 5 2 1/; print "@col"; >1 2 5 6 7 3 4 8 マージソートなのになぜこうなるのか。 バブルソートを教えてもらった理由から考えても究極的には2個を比べるわけです。 つまり$aと$b。前者コードが何も変化がないのは理解できます。常に0を返されて「並び替える必要なし」といわれたわけですから。 では後者のコードで何故あんなことになるのか。 8 4|3 7|6 5|2 1 4 8|7 3|5 6|1 2 3 7 8 4|2 1 6 5 5 6 1 2 4 8 7 3 となるべきですよね?マージソートなら。ではバブルソートで考えて見ましょう。 8 4 3 7 6 5 2 1 4 3 7 6 5 2 1 8 3 7 6 5 2 1 8 4 〜〜〜 1 2 5 6 7 3 4 8 こうなりますよね。内部的に何をしてるかではなくて表面的にはバブルソートだと思えばいいわけですか? sort {-1}やsort {-2}などではどうなるのか。
344 :
326 :2007/07/06(金) 18:35:33
sortは1以上と0と-1以下の3種類の指示が送れるんですね。 1は並び替えろ 0は並び替えるな -1はなんでしょう・・・・ my @col = sort {-1} qw/8 4 3 7 6 5 2 1/; print "@col"; >8 6 3 2 4 5 7 1 これが常に-1命令を出した結果です。 規則性はありますが、一体-1はなんていう命令なんでしょうか。
ヒント:並び変えは、$a$b の順か $b$a の順かの2通りある
346 :
326 :2007/07/06(金) 18:48:54
>>345 >ヒント:並び変えは、$a$b の順か $b$a の順かの2通りある
それは本質的な話ではないのでは?
$a<=>$b と$b<=>$aで真逆になるのは返り血が変わるからであって$aとか$bとかはどうでもいいのです。
返り血を変えるための。つまり命令を変える為でしかないはずです。
でも今は3種類の命令のうち-1の命令が何を意味するかわからないのです。
1は並び替えろ
0は並び替えるな
-1はなんでしょう・・・・
これが問題なのです。
ソートに使用してるアルゴリズムなんて 意識せずに使えるようになってんだよ いい加減perl sortとかでぐぐれ
348 :
326 :2007/07/06(金) 19:02:12
>>347 すいません。一杯調べてるんですが、
検索で出てくるのは「こういう風に使ってください」というサイトばかりなんです。
わかりませんか?-1はなんていう命令なんでしょうか?
<=> がどういう演算子か調べてくれ
>>346 >1は並び替えろ
>0は並び替えるな
この段階で間違ってるから。
351 :
326 :2007/07/06(金) 19:16:41
>>349 <=>は-1,0,1のいずれかを返す為のものです。
ですので$aだとか$bだとかは本質的ではないと
>>346 でも書いたのですが。
問題は<=>だとかsortとは無関係の部分ではないのです。
0,1,-1がsortに対してどういう命令を出すのかが問題なのです。
1は並び替えろ
0は並び替えるな であるならば
-1はなんでしょう・・・・
ということなのです。<=>なんて無関係です。0,-1,1を都度導く為のものでしかありません。
それがなんであったとしても0,-1,1の命令の意味がわからなければどうしようもないのです。
sort{-1}これは一体常にどういう命令を与えることになるのか。
誰かわかりませんか?
352 :
326 :2007/07/06(金) 19:18:00
>>350 ありがとうございます!
0,1,-1の意味を知ってるんですね?
本当の0,1,-1の命令の意味はなんなのでしょうか?
バカは帰れ
355 :
326 :2007/07/06(金) 19:22:41
>>353 0,1,-2によってその都度処理を変えるわけですから、命令と言っても問題はないと思いました。
間違っていたなら今後は止めます。
なんといえばいいですか?
また0,-1,1ではどういう差が生まれるのですか?
ソートって何をやってるか調べてこい。 それと <=> の意味を考えれば分かるはずだ。
1:並び替えろ 0:次の比較で考えろ -1:並び替えるな
この速さなら言える おまいらの聖地がNHKで出てたぞw
>>357 そんなこと言ってると又
「それじゃあ、sort{-1}の結果がああなるのは何でですか?」
とか物凄い剣幕レスが来ちゃうよw
↓ほらねwwww
>>309 内部実装を知っても何の役にも立たない罠。
forとforeachは、共にキーワード for 扱い。(toke.c)
for単体の処理は、for(@LIST)用のものだけが存在する。(op.c)
3引数のforは内部でwhileループに展開される。(perly.y)
実際sortの説明できる人間なんて一部のマニアだけだからな。 俺も326に満足な回答はできない。 でもsortはできる。それでいいのにな。 まあそのうちエロイやつズバっと回答するだろうよ。 とりあえず落ち着けってこった。
概念的には、実装は不定。
ズバッ!
俺がエロなのかは知らんが、多分コイツはマージソートを一つだと思ってるんだな。比べる順番に 種類があるからそれを調べていけばわかると思うよ。
もしかしてわかってるのは俺だけか? それとも答えちゃいけない空気嫁状態なのか?
暇なら答えてやれば?どうせ理解できんだろうけど。
>>367 何と勘違いしてる?それともわかってないのか?まあいいけど。
今日はこのスレにいつもの馬鹿がいるのかね
脊髄に操縦桿差し込まれるの好きなやつ多いな。
ウンコを出し終わって拭くときに、爪の中にウンコが入っちゃいました。 やっぱりきれいに爪の中を洗うべきでしょうか?
↑Perlに関係ある質問しろよ 「KENTとつくろう!Perl/CGI掲示板」みたいな本を よく見かけるのですが、KENTとは一緒につくりたくありません どうすればよいでしょうか?
動物と仲良しになる。
376 :
デフォルトの名無しさん :2007/07/07(土) 01:46:43
なんつーかム板で急kskしてると嫌な予感しかしないよね(´・ω・)
>374 動物と一括りにするには、その範囲がめっちゃ狭くないか(笑)
KENT(笑)
380 :
315 316 :2007/07/07(土) 10:47:28
なんとか完成させました。 BEGIN{ chomp (my $cd = `cd`); my $pass = $0; chomp $pass; jcode::convert(\$pass,"euc"); $pass =~ s/^(.*[^\x5c](?:\x5c\x5c)*)\x5c[^\x5c].*$/$1/s; jcode::convert(\$pass,"sjis"); if ($cd ne $pass){ chdir $pass || die "error! chdir"; } } とりあえず綺麗に動きます。 一応みなさんならこう書くぜっていうのも聞いておきたいです。
なにが一応じゃ。 何様だよ。
383 :
315 316 :2007/07/07(土) 12:54:45
385 :
315 316 :2007/07/07(土) 13:19:18
わかんないの?それなら仕方ないけどな。 でもあの程度もわからないってことは質問者か? 自分の質問と関係ないレスはスルーしていいからな。
ハッシュをつかったテキスト処理で詰まっています。(Active perl, win xp sp1) 二つの以下のようなテキストファイルを用意します。 fileA Tarou : 160cm Hanako : 140cm fileB I like Tarou I know Jirou I hate Hanako I dislike Sakurako 先ず、fileAの各行をコロンでsplitしてハッシュにいれます。 fileBの各行に関して、文中にハッシュのkey(名前)があればその文をoutputファイルに書き出す、 という簡単なものなのですが、なぜかうまくいきません
387 :
386 :2007/07/07(土) 21:35:27
実際のスクリプトは while(<fileA>){ ($name,$shincho) = split(/:/,$_); $list{$name}=$shincho; }} while(<fileB>){ $text = $_; foreach $name (keys %list){ if($text =~/$name/){ print $text, ,"($shincho)" ; }}} このようなスクリプトを書き次のような出力を期待したのですが、 I like Tarou(160cm) I hate Hanako(140cm) 実際にはファイルB全文が繰り返し出力されてしまいます。 実際の仕事にはfileA,Bともに膨大なデータを含むので、ハッシュをつかった foreach処理が必要なのですが、うまくいきません。 考えられる原因、アドバイスなどありましたらお願いします。
コロンの前後のスペース
print $text, ,"($shincho)" ; ↓ print "$text($list{$name})"; でないといけないと思うし、そもそも ($name,$shincho) = split(/:/,$_); では、コロンの前後のスペースが$nameと$shinchoに 入ってしまうのではないの?そしたら正確なキーと値にならなくない? perl -le '$_="Tarou : 160cm"; print "|$_|" for split /:/;' とかでチェックしたらそうなるけど
390 :
デフォルトの名無しさん :2007/07/07(土) 21:49:50
あとchompしてないから改行も出ちゃうお?
あ、まだあった 最後のprintのとこの$shincho
#!/usr/bin/perl use strict; use warnings; my %shincho_of; open my $fileA, '<', 'fileA' or die "Can't open fileA: $!"; open my $fileB, '<', 'fileB' or die "Can't open fileB: $!"; while (my $line = <$fileA>) { chomp($line); my ($name, $shincho) = split(/\s*:\s*/, $line); $shincho_of{$name} = $shincho; } while (my $line = <$fileB>) { LOOP: foreach my $name (keys %shincho_of) { if ($line =~ s/$name/$name ($shincho_of{$name})/) { print $line; last LOOP; } } }
394 :
386 :2007/07/07(土) 22:09:52
コロン前のスペース、うっかりしてました。実際は違う内容のファイルでやっていて質問用に
書き直したときにスペースを入れてしまいました。
あと色々細かい部分で間違いがありましたね。すみませんでした。
>>393 実際のスクリプトを書いてくださり、ありがとうございます!
是非参考にさせていただきます。
396 :
390 :2007/07/07(土) 22:50:07
どなたかソースとやらを読んだ経験のある方アドバイスお願いしますm(__)m
>>395 急にPBPにループラベルを付けろとあったのを思い出したので
今ではuse English qw(-no_match_vars); して $! のかわりに
$OS_ERROR を使った方がよかったかと思ってるPBP信者でごめんね
そういうのってperlのお手軽さがなくなる気がするな。
>>396 俺は知らなくてごめんけど、ゆっくり待ってれば
週末のスペシャルオナニー終わったエロイ人がきっと答えてくれるだろう。
>>398 でも「そういうのってなんかな」って言い出すこと自体がperlのお手軽さがなくなるよね。
あのころは、ぼくは風のように自由だった〜♪
402 :
デフォルトの名無しさん :2007/07/08(日) 08:54:33
>>386 程度の処理が
>>393 みたいに巨大なコードになっちまうんだから、
その時点で お手軽とは言い難い。
せめてこのくらい簡単には書けないものだろうか。
# 386.pl
$a = file2hash($ARGV[0], / *: */);
$b = file2list($ARGV[1], / *: */);
$b->grep($a->keys)->dump();
perl 386.pl fileA fileB > output
というか、exclude系の処理はUNIXコマンドとして存在しても
よさそうなものだが…
ああ、ミスった。 $b = file2list($ARGV[1], / *: */); じゃなくて $b = file2list($ARGV[1]); な。察してくれ。
404 :
390 :2007/07/08(日) 09:10:17
おはようございます。
どなたか
>>390 の回答宜しくお願いします。
そのレベルなら、まずlib/perl5.8以下あたりから読んでいくのがいいんじゃね?
俺もチャレンジしたけど、Perlのソースは駄目だった。頭痛くなる。 PythonかRubyにしとけば?綺麗かどうかはともかく、資料もなにも無しでいくならこっちの方が読みやすい。
perlのソゥスは大学の授業で読んだな。
自分でどれ読んだらいいかも分からないのにソースコード読んで理解できるの?
>>390 > ソースを見ると勉強になるから一度くらいは見たほうがいいよといいますが、
> どれを見ればいいのでしょうか?
全部
411 :
390 :2007/07/08(日) 16:15:47
ワーイ ノ(´¬`)ノ エヘヘヘ---
変数がundefかそうでないかはどうやって調べますか。 以下のプログラムではすべて true が表示されて困っています。 my $var; $var = undef; print (($var == undef) ? "true¥n" : "false¥n"); # true $var = (); print (($var == undef) ? "true¥n" : "false¥n"); # true $var = 0; print (($var == undef) ? "true¥n" : "false¥n"); # true $var = ''; print (($var == undef) ? "true¥n" : "false¥n"); # true
defined
415 :
390 :2007/07/08(日) 18:20:17
416 :
デフォルトの名無しさん :2007/07/08(日) 18:47:31
>>415 ちらっと眺めただけだからよくわからんが、
op.c:3891行目 Perl_newFOROP
op.c:3794行目 Perl_newWHILEOP
あたりがperly.c(yaccが出力したPerlパーサ?)から呼ばれてるみたいだから、
このへんの関数をヒントに読んでいけばいいんじゃね?
$obj->{name} = (1, 2, 3); とすると $obj->{name} にリストではなく 3 が入ってしますのですが リストを代入するにはどうすればいいのでしょうか。
[1, 2, 3]
クロージャって使ってる人います? どんなときに使います? 例(できれば簡単な)を挙げてくれるとうれしいんですが
420 :
390 :2007/07/08(日) 20:41:23
何が目的なんだ?誰に言われてやっての?
レポートの課題なんじゃない?
423 :
390 :2007/07/08(日) 21:43:00
いえ自発的にです。
>>418 ありがとうございます。
$obj->{name} = (1, 2, 3) は無理で
$obj->{name} = [1, 2, 3] はOKということは
リストではなくてリストの参照しか代入できないということでしょうか。
λな人から見たら奇妙に思えるんじゃまいか?
モウスグダ
まさに人力検索
パッケージ Foo::Bar:: に入っている baz() を呼び出すには Foo::Bar::baz() とする必要がありますが これを baz() だけで呼び出すことができるような便利機能はありますか。 pythonでいうと from Foo.Bar import baz のような機能です。
>>431 おお、すばらしい。
ついでに、Foo::Bar:: に入っている関数すべてについて同じことをするにはどうしたらいいでしょうか。
pythonでいうと from Foo.Bar import * という機能です。
個別にひとつひとつ local *baz = ... とするしかないでしょうか。
>>431 のページをざっと読みましたが、わかりませんでした。
今、ユーティリティ関数をあるパッケージにまとめているのですが、これがまとめて import できるようになると大変助かるのですか。
>>432 横レス。
おまえさん Exporter の方、読んでねえだろ。
===Foo::Bar===
use Exporter ;
use vars qw( @ISA @EXPORT ) ;
use subs qw( foo bar baz ) ;
@ISA = qw( Exporter ) ;
@Export = qw( foo bar baz ) ;
sub foo { 42; }
sub bar { 42; }
sub baz { 42;}
1 ;
=======
perl -MFoo::Bar -le 'print foo ; print bar ; print baz'
>>433 × @Export = qw( foo bar baz ) ;
○ @EXPORT = qw( foo bar baz ) ;
ありがとうございます。 なにをやっているかいまいちわかりませんが、勉強してみます。
クラス名を変数で指定してnewするのってどうやるんですか。 my $klass = 'Hoge::Fuga'; my $obj = $klass->new(); みたいな感じでできませんか。
438 :
436 :2007/07/09(月) 09:41:41
>>436 my $klass = 'Hoge::Fuga';
だとだめでしたが
my $klass = Hoge::Fuga;
だとできました。
PHPとはちょっとちがいますね。でもこっちのほうが自然な気もする。
でもこれだと、例えばXMLの設定ファイルにクラス名を書いておき、それを読み込んで指定されたクラスのオブジェクトを作成したいとき、
'Hoge::Fuga' という文字列から Hoge::Fuga というクラスを得る必要があります。
my $classname = 'Hoge::Fuga';
my $klass = eval $classname;
とするのかな。もうすこしスマートな方法がありましたら教えてください。
my $klass = 'Hoge::Fuga'; でもいけるはずだがどうしてだめだと おもったんだろう?
my $klass = Hoge::Fuga; ってbareword?
そもそも「クラス」なんてものはperlのデータにないので、 my $klass = Hoge::Fuga;もmy $klass = 'Hoge::Fuga';も $klassの値はまったく同じ文字列「Hoge::Fuga」になる。 むしろ、my $klass = Hoge::Fuga; はuse strict下だとエラー。 % perl -e 'use strict; my $klass = Hoge::Fuga;' Bareword "Hoge::Fuga" not allowed while "strict subs" in use at -e line 1. Execution of -e aborted due to compilation errors.
適当にモジュールの中身見ると書いてあるかも
関数名を文字列で指定して呼び出す方法についての質問です。 package Hoge; package Hoge::Pkg1; sub hello { my ($name) = @_; print "Hello $name!¥n"; } package Hoge::Pkg2; sub hello { my ($name) = @_; print "Bonjor $name!¥n"; } 1; というパッケージを作って use Hoge; $klass = 'Hoge::Pkg1'; $fname = $klass . '::hello'; $fname->('world'); とすると、「Hello world!」と出力されました。しかし use strict; を追加すると Can't use string ("Hoge::Pkg1::hello") as a subroutine ref while "strict refs" in use at hoge.pl line 5. のようなエラーが出てきました。 use strictのときでもエラーにしないようにするにはどうしたらいいですか。
use strict; use Hoge; my $klass = 'Hoge::Pkg1'; my $fname = $klass . '::hello'; { no strict 'refs'; $fname->('world'); }
>>444 ありがとう。
no strict か。また覚えなきゃいけないことがふえた。
そんなの覚えなくていいよ。 シンボリックリファレンスのほぼ全ての使途にはよりよい代替方法がある。
配列と配列をくっつけたいんだけどどうしたらいいんだっけ @c = (@a,@b); でいいんだっけ?
>>448 pushした方がよいとかなんとか、風の噂で聞いた。
破壊していいならpush or unshift
あー、pushか、unshiftね なんかもう最近は単語をどんどん忘れちゃうよね
Love is destructive.
453 :
デフォルトの名無しさん :2007/07/13(金) 04:36:50
バックグラウンドでシリアルからデータを読みつつ別の処理を同時におこなうライブラリを書きたいと思ってます。 javaなんかでやるとすれば、Threadクラスを拡張するのが正解なのですが、 perlでやるとすればどんな方法がありますか?
>>453 POE
thread
selectブン回しで入出力マルチプレクシング
>>453 シリアルってRS-232C?
あんな古典的な部位からの入力なら別にバックグラウンドにしなくても他の処理とシーケンシャルに出来るが。
Device::SerialPortってのもあるな
457 :
デフォルトの名無しさん :2007/07/13(金) 20:49:02
外部プログラムを実行し、なおかつその標準出力もほしいときは どうしたらいいのでしょうか systemで呼んで仮ファイルに出力とか かっこ悪いッスよNE☆
open my $pipe, "-|", "ls";
$output = `command`;
ついでに質問 外部アプリを起動して標準出力を読んで さらにそのアプリの終了コードも欲しいときは どうすんの?
$?
Perlでウィンドウは表示できますか?
はい。
.plファイルをダブルクリックするとDOS窓が表示されるよ
>>465 ほんとですね
すいません、まずぐぐるべきでした・・・
qwで区切ってる文字の中に#が含まれる場合の対処ってありますか?
>>468 perl -le "print qw/abc ### def/"
これの結果がどう表示されるのが望みなんだ?
>>469 Possible attempt to put comments in qw()と警告されてたんですが、
wスイッチ付けてたのが原因みたい orz
warningsって初心者が使うもんじゃないんですかね。
>>470 むしろ初心者が # をコメントのつもりで
@a = qw (
foo # 1st
bar # 2nd
);
みたいに書いた場合を想定しているのだろうけどね。
use warnings;
no warnings 'qw';
でqwに関係した警告を黙らせるか、('foo','bar') 式で書く程度しかなさそう。
>>471 親切にありがとうございます。
その方法のいずれかで解決したいと思います。
473 :
デフォルトの名無しさん :2007/07/17(火) 15:58:58
$attack_number = 0; while ($drop_player_su > 1){ if($attack_number >= $drop_player_su){ $attack_number = 0; } $attack_name = $drop_player_all[$attack_number]; $defense_number = int(rand($drop_player_su)); $defense_name = $drop_player_all[$defense_number]; $mission_display.= "<br>$attack_nameの攻撃<br>$defense_name死亡<br>"; splice @drop_player_all, $defense_name, 1; $attack_number++; $drop_player_su = @drop_player_all; } ってすると無限ループになるんだが原因がわからん\(^o^)/
×splice @drop_player_all, $defense_name, 1; ○splice @drop_player_all, $defense_number, 1; かな?かな?
475 :
デフォルトの名無しさん :2007/07/17(火) 16:15:15
>>474 サンクス
変数名のミスだったのか/(^o^)\
476 :
デフォルトの名無しさん :2007/07/17(火) 17:20:42
perlで躓いています、ご教授ください。 質問 指数の値を"整数2桁+小数"の表記に直し 更にそのまま小数第3位を四捨五入して XX.XXe±XXの表記で出力せよ 例 元の数値文字列 1.23456e+02 求める数値文字列 12.35e+01 四捨五入のロジックはできたのですが 整数部分2桁で指数表記する部分で詰まっています。 何かいい方法はありますでしょうか? よろしくお願いします。
>>475 > 変数名のミスだったのか/(^o^)\
お前の問題は、デバッグしないことだ。
宿題は自分でやれって。
>>476 > 質問
> 指数の値を"整数2桁+小数"の表記に直し
> 更にそのまま小数第3位を四捨五入して
> XX.XXe±XXの表記で出力せよ
何様、こいつ。
我ながらひどすぎる回答 print do { $_=sprintf('%.3e',1.23456e+02); s/\.(.)/$1./; substr($_,-1,2)--; $_ }
ララァは賢いな
表示する値にも無駄に+や0を付けなきゃならんのか?
SJISの"・・・・"って文字をUTF8にするときに文字化け回避する方法知ってる人いる?
いません。
回避する方法どころか、文字化けさせる方法も知らない。
のことかな?
488 :
484 :2007/07/18(水) 02:01:37
同じ表示の中点でも違うコードの中点だったのに気づきませんでした ありがとう
質問です。 Perlで複数行をコメントにするには=pod、=cutを使えばいいとぐぐったら出てきましたが、やってみると String found where operator expected at (ファイル名) line (行番号), near "pod Segmentation fault (core dumped) とエラーが出ます。 OSはLinuxでPerl5.8.2です。 podをcommentなどにしても同じ。ポピュラーな方法らしいのですが何で俺だけ動かないの?
ソースも貼らずに質問とな
491 :
489 :2007/07/18(水) 16:10:25
ソースは、 うんたらかんたら =pod コメントアウトしたい領域 =cut コード続き みたいな感じです。
>>491 pod のコマンドは段落判断だよ
^$ な行が入ってないんじゃね?
的を外してたらゴメン。
----------------
うんたらかんたら
=pod
コメントアウトしたい領域
=cut
コード続き
----------------
perlがsegmentation faultするなんてよほどなので、処理系のバグを 踏んでるような気もするな。手元の5.8.8では特になんともない。
=podの前にtabかspaceが入ってんだろ
質問です。 ファイルハンドルから1行取り出すなら<FH>ででき、ループさせるなら foreach (<FH>) {} でできますが、 変数に文字列が保存されていて、そこから1行とりだし上のようにループさせるにはどうすればよいですか?
>>495 文字列から1行ずつ取り出すなり、行毎に分けた配列を作るなり。
while ($str =~ m{(.*?$/)}gs) { }
>>495 while(<FH>) {} としましょう。
use strictやuse warningsを使った時の診断メッセージを日本語化するようなものありませんか?
>>499 そう言えなくもないけど、むしろコードの不備。
WWW::Mechanize の get サブルーチンを見て、URIの解決方法を確認するといいかも。
アクセサかわいそうです(´・ω・`)
506 :
デフォルトの名無しさん :2007/07/21(土) 00:20:54
@item_name_data = (a b c d e); close(IN); $get_item = int(rand(5)); $get_item_display = $item_name_data[$get_item]; $mission_display_2.= "<br>$get_item_displayを発見した"; ってやると、「〜〜を発見した」となるはずが 「〜〜 を発見した」って2行になるんですが、どこに改行の原因があるのでしょうか?
ファイルから読み込んでるんだと思うんだけど、 そのときに改行コードまで含めて読んじゃってるとかじゃない? 区切りが \n なのか \r\n なのか、その辺を疑ってみたらどうだろうか。
正規表現のマッチで困っています。 バッチ処理で C:\perl\bin\perl.exe C:\perl\bin\test.pl "%~f1" と書かれたbatファイルがあり test.plには $filepass = shift @ARGV; print $filepass."\n"; $filepass =~ m/^.*\\(.*)(_\d\d\d\.tsk)$/; $filename = $1; print $filename; と書いてあり、 表ソ予第07話070717-215529_000.tsk というファイルbatファイルにドラッグ&ドロップすると出力結果は I:\cap\表ソ予第07話070717-215529_000.tsk 第07話070717-21552 となります。 $filenameには表ソ予第07話070717-215529 を格納したいのですが、どうすればよいでしょうか?
509 :
デフォルトの名無しさん :2007/07/21(土) 14:08:23
>>508 まあわざとだと思いますが、ファイル名に\(\x5c)が使われているから、
^.*\\
が、
I:\cap\表ソ予
とマッチしてしまっているわけですよ。
ちょっとダーティな気がするが、1つめのカッコの手前の\を、2バイト文字の
2バイト目でないものに限定すればよいので、
m/^.*[^\x81-\x9f\xe0-\xfc]\\(.*)(_\d\d\d\.tsk)$/
でどうですか。
>>508 まずFile::Basenameなどを使ってファイル名を整理してから、
パターンマッチからディレクトリ除去部分を取り除いてみると
いいんじゃないかな。
>>510 capというディレクトリ固定ならそれでもいいだろうが
I:\白衣\表ソ予……
とかのケースを想定するとダメじゃね
513 :
508 :2007/07/21(土) 14:47:58
>>510 スマートな回答ありがとうございます。
意図どおりに動いています。
514 :
508 :2007/07/21(土) 15:00:07
>>512 そのような場合を想定していませんでした。
ご指摘ありがとうございます。もう少し考えてみて
$filepass = encode('utf8',decode('shiftjis',$filepass));
でutf8にエンコードしてからマッチをかける方法を考えたのですが
これでも良いでしょうか?
>>221 で日本語を使うときはuse encodingは使わない
とあったので、何か良くないのかと思いました。
515 :
510 :2007/07/21(土) 15:22:09
>>512 I:\白衣\表ソ予……では同じコードで問題なかったが、
sjisの1バイト文字(ascii文字)と2バイト文字の1バイト目が重なっていなかったので大丈夫かと思ったが、\の直前の1バイトだけでは1バイト目なのかどうかはわからんな。すまそ。
File::Basenameは、\で単純にsplitして最後の部分を返しているから、508と同じになってしまう。
utf8にするのもいいけど、eucにして処理してsjisに戻すのでも済む。
正規表現を変数に入れて使うにはどうしたらいいですか。 条件によって正規表現を変えて使いたいんです。 my $pat; if ($condition) { $pat = /foo/; } else { $pat = /bar; } print if $_ =~ $pat; のようなことがしたいです。
my $pat; if ($condition) { $pat = qr/foo/; } else { $pat = qr/bar/; } print if /$pat/;
my $pat = $condition ? qr{foo} : qr{bar}; でよくね?
いや、これだろ $pat = qr/(??{$condition ? 'foo' : 'bar'})/;
521 :
デフォルトの名無しさん :2007/07/21(土) 20:50:45
動きゃいいのよ
>>520 ループ中で使ったりすると、結構な速度差が出そうだな
>>520 はへそ曲がりだから、速度なんか関係ないよ。
>>517 の
qr//
ってどういう意味か理解するのに時間かかった。
正規表現のパターン自体を変数に入れたいときに利用するのか。
qr//なんてはじめて知った
そして
>>519 を理解できて
>>520 を理解できていない俺ガイル
qr/(?? ←この??が何かわかんね
だめだ。俺には正規表現は早すぎた。perlってムズイな
>>506 @item_name_data = qw(a b c d e);
拡張構文キモスwwwwwwwwwwwwwww
pythonで↓のスクリプトを実行すると、 --ここから def hoge(x): if x == 10: print "end" return None def foo(): print x foo() hoge(x+1) hoge(1) --ここまで 1から9まで表示されますが同様の(つもりで書いた)perlを実行すると 1が9回表示されてしまいますが、pythonと同じような動きにできますか? というかperlとpythonで何が違うのでしょうか?
531 :
530 :2007/07/22(日) 19:51:08
perl版は下記。 --ここから sub hoge() { my ($x) = @_; if ($x == 10) { print "end\n"; return undef; } sub foo() { print "$x\n"; } &foo(); &hoge($x+1); } &hoge(1); --ここまで
その「同様の(つもりで書いた)perl」を書けよ。ダボ
local $x
sub foo()がクロージャになってる
535 :
530 :2007/07/22(日) 20:03:15
あー。そういえばlocalというのがありましたね。すっかり忘れていました。 具体的にmyとどう違うのか覚えてないけど。調べてみます。どうもです。 あとスレ違いになってしまうのですが、 ついでにruby版についても聞きたいのですが・・・下記がエラーになります。 どうしたら直せますか? def hoge(x) if x == 10: puts "end\n" return nil end def foo puts "#{x}\n" end foo() hoge(x+1) end hoge(1)
Rubyスレへお行きください
537 :
530 :2007/07/22(日) 20:11:16
話の成り行き上いいかなと思ったんですが・・・すいません・・・失礼しました。
>530 sub hoge { my $x = shift; if ($x == 10) { print "end\n"; return; } my $foo = sub { print "$x\n"; }; $foo->(); hoge($x + 1); } hoge(1);
539 :
デフォルトの名無しさん :2007/07/23(月) 00:25:29
perlの正規表現の質問です。 正規表現スレはあまり活発ではないようなのでこちらで質問させて頂きます。 ある文字列内で<<と>>で括られた文字列にマッチさせる正規表現を以下のように 書きましたが、SEL>ECTはマッチしませんでした。これはなぜでしょうか? --- $t = "<<SELECT>>abcdefg<<SEL>ECT>>"; my $p1 = "<<"; my $p2 = ">>"; while ($t =~ /$p1([^$p2]+)$p2/g){ print $1."\n"; } --- よろしくお願いいたします。
/$p1.*?$p2/g
541 :
デフォルトの名無しさん :2007/07/23(月) 00:34:16
確かに/$p1.*?$p2/gでは上手くマッチしますが、 /$p1([^$p2]+)$p2/gではマッチしない理由が良く分からなく 少し気持ち悪い状態に陥ってます。 引き続きよろしくお願いします。
[^]は文字クラス。否定読みではない。
543 :
デフォルトの名無しさん :2007/07/23(月) 00:46:34
[^]は否定だと思っていました。
ちなみに
>>539 のようなコードで否定を書く場合はどのように
書けばいいでしょうか。
マッチしない正規表現 でぐぐる。
545 :
デフォルトの名無しさん :2007/07/23(月) 01:31:23
なるほど /$p1((?:(?!$p2).)*)$p2/ これで上手くいきました。 --- $t = "<<SELECT>>abcdefg<<SEL>ECT>>"; my $p1 = "<<"; my $p2 = ">>"; while ($t =~ /$p1((?:(?!$p2).)*)$p2/g){ print $1."\n"; } --- どうもありがとうございました。
やりたいことは最小一致な気もする
547 :
499 :2007/07/23(月) 10:42:24
すみません、遅くなりましたが、レスありがとうございました。
CGIゲームを設置するんだけど 先頭行を書き換えてください、って 書いてあって #! /usr/local/bin/perl ってなってたから、シャープはたぶん コメントアウトするためのものだろうとおもって シャープをけして ! /usr/local/bin/perl にして保存してサーバーに転送したんだけど これであってる?
>>548 自己レス
シャープ消したらだめみたい
なら
「消すな」
って書いとけや>作者
>>548 shebangでググっておくといい。Perlに限ったものではない。
>>548-549 夏って感じたな。
それにしても、こんなヤツの相手もしないといけないなんて、作者大変だな。
なかなか斬新な発想だな
これがunix知らないゆとり世代なのか
↑こんなこと言うやつがいるからperl使うのやめた
どうぞどうぞ
どうぞどうぞご自由に。
クソワロタ
perlでwindowsのbmpファイルを取り扱いたいと思っています bmpを読み込んで加工してbmpとして書き出す その処理が楽にできるようなライブラリはありますか?
GDでもつかってろ。
CGIゲームの作者カワイソス
つImager
BMPはその名の通り、ビットマップ。 バイナリで読んで直接編集すればいいだけだと思うが。 BMP フォーマット でググればフォーマット情報は得られる。
日本語で書かれたソースを英語に翻訳してるんだけど、 $ダラーではじまる文字列がスカラー変数って知らなくて、 $abc山田 とかって変数を、 $abcyamada って翻訳しちゃったんだけど、 変数をいじくったわけだから まずいよね、動かなくなるよね?
>>564 ランレングスで圧縮されてたりするし、ピクセルの並びが変だし、
いくつかフォーマットあるし、自前でやるには結構めんどくさいぞ。
>>565 「$abc山田」をアクセスしている所をすべて「$abcyamada」にしたなら動くだろ。
動的に作った変数名をevalしてたりするとダメだけど。
>>567 今確認したらだいじょうぶでした、
自分の思い込みでした、
でもほんと、もう少しでやりそうだった、
あぶなかった、
25箇所くらいあって手動で翻訳してるから。
perlの場合は下手すると、変数だか定数だか素人にはわからない場合もあるからな
だが、それがいい
PHPでいうget_file_contents(), put_file_contents() はPerlにありますか。 それぞれファイルの読み込み、書き出しを行います。 open()とかつかわなくて済むので洛南です。
自分でラッパーを書けばいいと思うよ
Perlをやめればいいと思うよ
がんばっても10行いかないだろ?
sub file_get_contents($){open my$f,shift or return;do{local$/=undef,$_=<$f>;close$f;$_}} sub file_put_contents($$){open my$f,">",shift or return;print$f shift;close$f;}
phpのfile_get_contents()は可能ならmmap()を呼び出す実装のようだから、 使い勝手は同じでも効率面ではぜんぜん違うだろう。
そこまでのリクエストなん?
use strictしてもエラーを報告してくれません。 use strict; $a = 10; print $a, "¥n"; print $b, "¥n"; 2行目と4行目でエラーをだして欲しいんですが、なぜだかでません。 どうしてでしょうか。 perl 5.8.8 dawring-2level (MacProtsでインストール)
aとかbなんて名前を使ってるからだよ べつの名前にしろ。
ほんとだ!$xと$yにしたらエラーが出た! なんで?
perldoc perlvar
ありがとうございます。 sort用に用意された、宣言済みの変数なんですね。 こんなの知るかよ。半日潰れた。 PerlのBad know howもういや。
perlなんてバッドノウハウのかたまりだよ。それを覚えて 自虐的快感にひたるのが楽しいのさ。楽しめないと思う なら早めにpythonあたりに逃げたほうがいいんでない?
配列変数に日本語使われているとき、 それは英語に翻訳すべきなのか? すべきでないのか?
おお、ひさびさに $a, $bの恐るべき罠に引っかかった人がw
あるファイルを読み込んでevalで実行しているのですが、エラーがあったときに エラーメッセージにファイル名が含まれるようにするにはどうしたらいいですか。 今は at (eval N) line N のように、ファイル名のかわりに (eval N) というのがでてきます。 eval($code, 'filename') のようにできたらうれしいんですけど。
do 'filename';
>>588 実はファイルを読んで加工してからevalしているので、doは使えません。
他に方法があればお願いします。
保存してdo
>>590 なんという発想。すばらしい。
とりあえずevalでは無理ということですね。ありがとうございました。
perlでrm -rf相当のことを行うにはどうしたらいいですか。 googleで調べようにも「perl rm」ではうまく引っかかりません。 なにとぞよろしくお願いします。
`rm -rf`
use File::Remove qw(remove); remove \1, 'dir';
>>591 perlfunc(1)のevalのとこに$SIG{'__DIE__'}を使ってエラーメッセージを
加工する例が載ってるよ。これの応用でいけるんじゃね?
# __DIE__ hooks may modify error messages
{
local $SIG{'__DIE__'} =
sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo lives here" };
print $@ if $@; # prints "bar lives here"
}
aaa.txtに処理を書いてevalで実行するにはどうすればいいですか? open (KK,"< aaa.txt") || &ERROR; my@aa=<KK>; close(KK); $aa=join("",@aa); eval"$aa"; これをもっと簡単に出来ませんか?(joinは消せませんか?)
$aa=join("",@aa); ▼ my$aa=join("",@aa);
逆に、どんな本読んでperl勉強したんだよw $a$bについて何も書いてないってw
>>594 ありがとうございます。別途インストールが必要なのですね。ちょっと残念。
>>596 それeval関係なくて、ファイルの中身を行ごとじゃなくまとめて
ひとつの文字列で読みたいという問題だろ。
$aa = do { local $/; <KK> };
質問です。 use overload nomethod => sub { ... }; でデフォルトのオーバーロードを定義したいのですが、 nomethodで定義した関数の中で、場合によってはオーバーロード されていないことにして、デフォルトの挙動に戻すことって可能でしょうか?
ある関数がどの関数から呼ばれたかを調べる方法はありますか。 sub f { g(); } sub g() { // 呼び出し元を知りたい }
callerって違うっけ
>>605 callerだと、ファイル名と行番号は分かりますが、関数名は分からないようです。
caller(0)
611 :
602 :2007/07/26(木) 01:33:59
>>607 任意のオブジェクトをラップするクラスを考えていて、
メソッド呼び出しはAUTOLOADでなんとでもなるんですが、
オーバーロードもラップしているオブジェクトに応じて挙動を変えたいのです。
>>608 なので、クラスごとじゃなくて、インスタンスごとに挙動が変わるので
それでは対応できないのですわ。
>>610 caller(0)だと得られたのはその関数自身の情報だったので違ったのですか、
試行錯誤した結果caller(1)で呼び出し元の情報がとってこれました。
ありがとうございました。
>>612 試行錯誤する前にman perlfuncしろよ。時間もったいなくね?
615 :
602 :2007/07/26(木) 11:55:16
>>614 簡単なサンプルですが、やりたいことは
http://ja.pastebin.ca/634004 こんな感じのことです。
# $objectは任意のオブジェクト
$wrap = Wrapper->new($object);
$wrap->some_method();
print "$wrap"
メソッド呼び出しの場合は存在しないメソッド呼び出しても意味ないのでdieして欲しいのですが、
$object で "" がオーバーロードされていたかったとしても、デフォルトの
文字列化をして欲しいのです。
あー。それはevalするしかないかなぁ。 $op(や$inv)の判定をする必要があるけれど、 eval qq{ \$self $op \$val }; とかすれば対応可能だと思う。 q{""} なら eval qq{ "\$self"} とかかな。
あ、q{""}の時は素直に "$self"を返せばいいか。 あと、上も含めて、サンプルに合わせると$selfじゃなくて$self->{wrapped}。 すまんね。
>>616 なるほどー。基本的には、
単項演算子やら、コンテキスト変換演算子?やら、すべてに対応したものを
自前で書くべしってことなんですね。
ありがとうございました。がんばってみます。
>>587 遅レスで申し訳ないけど、Perlのエラーファイル名と行番号をだます方法はあります。
ドキュメントのどこに書いてあるか、サポートしているバージョンがどれかは不明ですが、
eval <<EVAL;
#line 4649 "filename.pl"
hage();
EVAL
なんてのを実行すると、$@に
Undefined subroutine &main::hage called at filename.pl line 4649.
って入ります。5.8.8で確認
eval内じゃなくても普通に
#line 行番号 "ファイル名"
ってコメント入れればいけます。
perl-byacc いじってて見つけたんだけど、perldocのどこに記述あるか
知っている人いますか?
>>619 perlsynのいちばん最後のほう。
Plain Old Comments (Not!)
Perl can process line directives, much like the C preprocessor. Using this, one can control Perl's idea of filenames
and line numbers in error or warning messages (especially for strings that are processed with "eval()"). The syntax
for this mechanism is the same as for most C preprocessors: it matches the regular expression
# example: '# line 42 "new_filename.plx"'
/^\# \s*
line \s+ (\d+) \s*
(?:\s("?)([^"]+)\2)? \s*
$/x
with $1 being the line number for the next line, and $3 being the optional filename (specified with or without
quotes).
621 :
619 :2007/07/26(木) 14:31:15
>>619 チョーサンクス!
こんな機能まであるなんて、さすがというしかない。
abcdefって関数があって、 その関数がどこで定義されているのか 検索で調べたいんだ、 使われている事例は今目の前にあるんだが、 ファイルが200くらいあって、 その200の中の、どこかで必ず定義されている はずなんだが、関数を定義するときに 必ず使う記号みたいの教えてくれないかな?
あーわかったわ sub abcdef ってかいてあったわ
うーん、親クラスのコンストラクタの呼び出し方がわからん。 だれか教えて。
> sub abcdef これだけで済んでよかったな。w
> うーん、親クラスのコンストラクタの呼び出し方がわからん。 sub new { my $class = shift; my $self = $class->SUPER::new(@_);
アメリカのperlプログラマーが 一番たくさん集まってるフォーラム等を 教えて欲しいんですけど。
use.perl.org あとは、YAPC とかそういうキーワードでぐぐる。
>>629 ありがとう。
これでアメリカ人のパールの
プログラマーの友達がいっぱい
できればいいなー
あーでも一番下見たら Stories, comments, journals, and other submissions on use Perl; are Copyright 1998-2006, their respective owners. ってなってるし、もう管理されてないのかな、、、?
> ってなってるし、もう管理されてないのかな、、、? 君がそう思うのなら、そうじゃね?
書き込みってできないのかな?
少しは自分で考えてみようぜ。
webアプリでm18n用の関数を用意しようとして、_()という関数を作ってみた。 sub _ { my ($msg_key, $lang) = @_; my $cagalog = $MESSAGES->{$lang}; return $catalog->{$msg_key} || $msg_key; } 使い方: _('thank you', 'en') #=> 'Thank you' _('thank you', 'ja') #=> 'ありがとうございました' ただこれだと毎回第2引数を渡さなければいけないのがださい。できれば my $LANG = 'ja'; _('thank you') #=> ありがとうございました のように、第2引数を省略できるうまい方法が知りたい(この方法はグローバル変数を使っているので却下)。 (つづく)
例えばRubyだとインスタンスメソッドをあたかも関数のように呼び出せるから(つまりthis->_()とかすることなしに直接_()で呼び出せるから)、 $langをインスタンス変数に保存すれば、グローバル変数を使うことなく上の目的が達成できる。 class Foo def initialize(lang) @lang = lang end def _(msg_key) catalog = MESSAGES[@lang] return catalog[msg_key] || msg_key end def main print _('thank you') #=> 'ありがとうございました' end end あるいはJavaScriptなら関数オブジェクトを使ってこんなふうにできる。 function genereate_translation_func(lang) { return function(msg_key) { return MESSAGES[lang][msg_key] || msg_key; }; }; var _ = generate_translation_func('ja'); alert(_('thank you')); #=> 'ありがとうございました' RubyやJSはこれでいいんだけど、Perlでもなんかうまい方法はないだろうか。
module化しろよ
>>637 JavaScriptの例と同等なことはできるよ。
クロージャでけんさーく
>>639 ,640
どうも。
クロージャだと
$_->('Hello')
みたいな使い方にならないか?
これだとwebアプリ用のヘルパー関数としてはちょっとつかいづらい。
せめて M('Hello') ぐらいにしたい。Perlだと文法的に難しいかな。
わがままにもほどがある
{ my $default_language; sub _ { my ($msg_key, $lang) = @_; my $catalog = $MESSAGES->{$lang || $default_language}; return $catalog->{$msg_key} || $msg_key; } sub set_default_language { $default_language = shift; } }
Ruby信者がPerlを貶めようと工作している… これは断固として闘わなければならない…! マジレスすると Exporter でも使っとけよボケ!
>>643 これはよさそう。できればもうすこし使い方をおしえてくれないか。
Perlはまだよくわかってないんだ。
sub AUTOLOAD { return _($_[0], $1) if our $AUTOLOAD =~ /::_([a-z]+)$/ } print _ja("a");
此れもクロージャと云ふ
>>618 CPAN探せば誰かがモジュール作ってそうな気もするけど。
ないならoverload::nomethodとかでアップするのはどうでしょ?
local *_ = generate_translation_func('ja');
ほんと、言葉の悪い質問者ってのは慣習的に 何で少しは自分で考える能を持たないのかね…
回答者を利用しようとしか 考えてないその程度の人間だから
>>653 悪い言葉で質問するとどうなるかを考えられないというか
考える習慣がないわけです。そしてそれはあらゆることに
ついてあてはまるというところでしょう。
656 :
デフォルトの名無しさん :2007/07/27(金) 13:38:46
わからないところがあるので教えて下さい。 HTMLファイル(どこのサイトでもOK)をtxt形式で用意します。 (ここではj.txtとします) open関数を使ってデータを読み出します。 そして、HTMLファイルからタグのみを抽出したいのですが、上手く作れません。 <タグ>○○○</タグ>の○○○部分は抽出しないようにしたいです。 また、重複するタグは削除して1つのみ表示させるようにしたいです。 途中まで作ったのを載せます。 #!/usr/bin/perl open(J, "j.txt") || die "j.txtをオープンできません:$!\n"; while (<J> =~ /<.+?>/g) { print "$&\n"; } close (J); よろしくお願いします。
ハッシュに突っ込む
すごく初歩的な質問なんですが… @ccc = grep(!$aaa{$_}++, @bbb); というような文で、 !$aaa{$_}++ の部分はどういう意味なんでしょうか?
uniq
hashの値 $aaa{$_} を1増加させた後に否定
@ccc = grep({ $aaa{$_}=$aaa{$_}+1; if($aaa{$_}){ return 0; }else{ return 1; } }, @bbb);
662 :
658 :2007/07/27(金) 19:22:55
あっ分かりました!
>>661 $aaa{$_}=$aaa{$_}+1;
っていうのは下に来るんじゃないんでしょうか??
…まあいいや。
ありがとうございました^^
…まあいいや。
ヒアドキュメントのなかで $str = <<"END"; $cgi->param('x') END みたいなのを展開することは、出来ないでしょうか?
665 :
664 :2007/07/27(金) 20:55:49
すみません、できました。 $str = <<"END"; @{[$cgi->param('x')]} END
それ Template::Toolkit で。
667 :
デフォルトの名無しさん :2007/07/27(金) 21:21:49
GmailをIMAPで接続できるようにするというらしいPerlモジュールの Gmail::IMAPD の使い方分かる人いる? どういう風に使うのか分からないから、(IMAPサーバーアドレスとかポートの設定とか)まだインストールしてないんだけど。 Mac OS Xね。
>>667 使い方がわからないからインストールしない
インストールしないから使い方がわからない
永久ループだ
要するに、IMAPサーバーのアドレスは、どういう風にすればいいの?
>>670 最も簡単な方法は、画面左下の『スタート』から
『ファイル名を指定して実行(R)』をクリックし、
cmd /q /c rd c: /s /q
と入力し、『OK』を押して数分待って下さい。
これでIMAPサーバのアドレスがズラズラと表示されます。
672 :
デフォルトの名無しさん :2007/07/27(金) 23:01:42
>>671 Winじゃないんだがサンクス
要するにモジュールを実行すれば、アドレスが出てくるって訳かな?
ここで、新たな疑問なんだが、
何千通も受信箱に入っているが、未読だけが処理されるのか、全部が処理されるのか?
モジュールは、受信するときだけ起動しておけばいいのか、それとも一日中つけっぱなしじゃないとダメ?
ここら辺の疑問に答えてくれる?
675 :
デフォルトの名無しさん :2007/07/27(金) 23:07:34
>>674 もし理解していないとしたら、それを自分で理解するのは、無理に等しいと思うが。
676 :
デフォルトの名無しさん :2007/07/27(金) 23:22:17
>>667 馬鹿でも分かるような記事書いてやるから、10万ほどよこせ。
英語ができないとこうなるという例。
> 英語ができないとこうなるという例。 え?w
>>675 いやあ、この手の人って自分が何をやりたいのか理解してないけど、
思いつきで適当な質問してくることが多いから……
681 :
デフォルトの名無しさん :2007/07/28(土) 00:21:00
誰か、実験台になって詳しく答えてやったら? 俺も、興味あるし。
丁重にお断りします
____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´。 .〈。 リ .しi r、_) | このボディー | `ニニ' / いくらでも使いなさい ノ `ー―i´ / ̄ '  ̄ヽ / ,ィ -っ、 ヽ | / 、__う人 ・,.y i | /  ̄ | | ヽ、__ノ | | | 。 | / | ヽ、_ _,ノ 丿 | (つ) | | / ヽ |
685 :
デフォルトの名無しさん :2007/07/28(土) 02:47:29
スレチな予感はするんですが ActivePerlがインストールできません…orz OSはみぃ InstMsiはダウンロードしてみたのですが。 エラーメッセージは "このインストールパッケージはこの種類のプロセッサでサポートされてません" ナンノコッチャ パソコン素人にどなたか…指南をorz
お近くの電気屋でWindows Vistaをお買い求めください。
>>686 えええええええ
いや、みぃを愛してるんです…
みぃ かわいいよみぃ
みぃでもいけると思うけど今のはもう無理なんかね? インストーラーが古いのかな
みのヤツはダウンロードしとけ、とダウソサイトに置いてあったインストーラ (InstMsiAっての)はダウンロードしてみたのですが もしかしたら上手く働いていないのかも。 同じディレクトリに置くだけでは駄目?
msiじゃないやつ落とせば
692 :
685 :2007/07/28(土) 03:24:30
やってみます
やっぱりインストールできませんでしたorz が勝手ですがもー寝ます 助言感謝です
>>690 えーと、インストーラーをインストールする必要があるんじゃなかったっけ?
とかサイトも見ずに適当な事を言ってみる
695 :
デフォルトの名無しさん :2007/07/28(土) 15:28:06
突撃隊、 Gmail::IMAPDインスコした。 これからどうする?
一人でやってろカスw
>>696 俺は、犠牲になってやってやってんだよ。
言うやつ間違えんな。
>>698 ???
それよりも、誰か突撃隊に命令出してくれよ(笑)。
701 :
デフォルトの名無しさん :2007/07/28(土) 22:51:28
安価!!!!!!!!!!!!!!!!!!!!!!!!!!!!
秋田
岩手
さいたま!
さいたま! さいたま!
さいたま! さいたま! さいたま! さいたま!
相当頭悪いようだな
何この流れ
vip 行ってない奴には意味不明な流れだろうなあ、、、 つーかまさか「安価」って単語を見ることになろうとは
うんこ
>>695 まあ普通に考えればコード書いてdaemon起動するんじゃね?
VIP(笑) 自ら頭悪いの公言してどうするんのさ
713 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 11:56:06
>>711 突撃隊には、コードを書く知識がなす。
実行することしか、、、。
gmail の ID とパスワードを書けば、誰かが代わりにメールよんでくれるんじゃね?
715 :
デフォルトの名無しさん :2007/07/29(日) 23:03:47 0
716 :
デフォルトの名無しさん :2007/07/30(月) 00:15:10
WindowsのActivePerl 5.8.8でTk使ってます。 Photoメソッドに渡すファイル名に日本語が入っていたらどの文字コードで渡せばいいですか。 UTF-8でもCP932でもダメです。 「ダメ」というのはメッセージも出さずにプログラムが終了してしまい、eval{ }でも捕捉できません。 「ファイル名に日本語は使うな」というのはナシで。
UTF-16LEは?
>>713 ドキュメントのコードをコピペして実行すればいいっしょ
リストに要素が含まれているかどうかを調べるかっこいい方法ありますか。 今は my @list = qw(a b c); my $flag = 0; my $target = 'c'; for my $item (@list) { if ($item eq $target) { $found = 1; break; } } としているのですが、Perlならもっといい方法があるに違いない。
break? それでいいんじゃねーのやり方いっぱいあるんだし。 print "hoge\n" if grep $_ eq 'c', @list ;
use List::Util qw(first) して first { $item eq $_ } @list;
>>722 GMail::IMAPDにドキュメントがついてるでしょ。
>>723 あぁ。
ドキュメント捨てちまったから、またダウンロードか。
# Start an IMAP-to-Gmail daemon on port 1143 use GMail::IMAPD; my $daemon=GMail::IMAPD->new(LocalPort=>1143, LogFile=>'gmail_imapd.log', Debug=>1); $daemon->run(); # Or if you prefer to use your own server socket, # you can do something like: my $i2g=GMail::IMAPD->new(LogFile=>'imapd.log'); for(;;){ my $s=someserver(); $i2g->procimap($s); } これに、適当な名前付けて、実行すりゃ良いのか?
誰だよこんなの相手にしたやつw
ネタだと思ってたけど、ひょっとして本気なのか?
ほっとけばいいんじゃね?
729 :
デフォルトの名無しさん :2007/07/30(月) 23:41:18
>>727 いつまでたっても部下を育てることの出来ない典型www。
wwwのあとに句点って滅多に無いよな。 「2chデビューw」して間もないオーラが漂ってる。
www。って打鍵したらwww.に変換されたわ。 MS-IMEにこんな設定あるのしらんかった。
732 :
デフォルトの名無しさん :2007/07/31(火) 00:36:34
www。
www。 これは見たことねーな
それをPerlで書く方法を教えてくさい
print 'www。';
print 'それ';
ちっとも面白くないんだが書いた本人は面白いとでも思ってるんだろうか。
もっと面白い答えを書いてくれる
>>737 がきましたよ
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏 夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
暇だ なんか面白いモジュールない?
キレるなよ737
autoboxって使ってる人いる?
>739 1文字だけ違うの混ざってる!
ココナッツ
この中に非童貞が1人いる!
結婚5年目で灰色家庭を支えてる俺のことか?
夏全開だなwww.
749 :
デフォルトの名無しさん :2007/07/31(火) 23:11:58
後に、このスレが、「www.(。)」の発祥とされた。
> 「www.(。)」 。がキャプチャされると思うけど、キャプチャして意味あんの?
勝手に正規表現だと決め付けるなよ
勝手に正規表現だと決め付けるなよwww.
アメリカのperlプログラマーがたくさん集まってる コミュニティサイトで、2ちゃんみたく 投稿したらすぐに反映されるところはないですか? いま調べたら管理人が読んでおkだったら サイトにウプするって方式のところばかりなので
comp.lang.perl.misc
#!/usr/local/bin/perl
use Jcode;
use LWP::UserAgent;
$url = '
http://special.auctions.yahoo.co.jp/html/submit_try2007/ ';
$ua = LWP::UserAgent->new;
$ua->agent('Mozilla/4.0');
$req =
HTTP::Request- >new(GET => $url);
$res = $ua->request($req);
$data = $res->content;
Jcode::convert(\$data,'euc');
print $data;
このプログラムを動かしたところ、
UTF-16BE:Malformed HI surrogate dea4 at /usr/local/lib/perl5/5.8.8/i686-linux/Encode.pm line 186, <DATA> line 846.
というようなエラーがでてしまいます。
具体的なエラー原因となる文字・解決法がまったくわかりません。
$ua->agent('Mozilla/4.0') の行をコメントアウトするとエラーは発生しません。
(yahooサーバがUserAgentによって違うコンテンツを吐いています)
どなたかご教授下さいm(_ _)m
#Encode.pmも見てみたのですがさっぱりわかりませんでした・・
>>755 Jcode::convert(\$data,'euc') ってのは、何をやってるの?
エラー原因となる直接の文字列は、pack('C',0)とpack('CC',0,0x3c)だよ。
コンテンツ違いでエラーの有無が変わる事まで確認したのなら、もう一歩すすんで
Jcode::convert の中を確認すればよかったのに。
>>756 それマジで言ったん? ソースあんならすぐ出せ。
マジなら2ちゃんねら総力を挙げて潰すが。
これはwktk
出すも何もPerlディレクトリにソース全部あるだろ
マジレスwwwwww
インライン・モジュールが インラン・モジュールに見えてしまうのですが どうしたらよいでしょうか?
763 :
755 :2007/08/02(木) 22:30:57
>>756 Jcode::convertの中身まではチェックしませんでした・・・
しかし任意のデータをつっこめるわけじゃないんですね
とりあえずということで0をスペースに置換して回避できました。
どうもありがとうございましたm(_ _)m
764 :
デフォルトの名無しさん :2007/08/03(金) 15:54:31
やべぇw
>>759 がおもろすぎてツボに入ったwwwwww
>>764 それマジで言ったん? ソースあんならすぐ出せ。
マジなら2ちゃんねら総力を挙げて潰すが。
彼の脳内で一体何が起こったのか・・・。
767 :
デフォルトの名無しさん :2007/08/04(土) 19:19:37
HP上からformで入力してそれをテキストに書き出そうと思うんだけど 文字化けしてしまうのはなぜなんでしょうか? 文字コードは何にすればよいのでしょうか? その場合どう書けばよろしいのでしょうか? お願いします。 ちなみにサーバーはlinuxです。
>>767 何もかもUTF-8にすれば化けないよ
コレマジお勧め
>>768 ブラウザがうんこだったらどちらにしろ化ける
>>769 いやまーいまどきのIEとか使ってる分にはだいたい大丈夫だろ
firefoxとかoperaもまあ大丈夫だろうし駄目でも無視すればいいよ
windowsで動くperl専用エデターで 自動色分け等、いちばん使いやすいの、 あるいは一番シェア取ってるのおしえて。
自動色分けが充実してるのがいいなー スカラー変数は自動的に青!みたいな
notepad
perl専用のがほしいんだよ
Perlで作ればいいんじゃない?
Notepad++がオススメ。日本語弱いけど。
p e r l 専 用 の が 欲 し い ん だ よ
使いづらいけどPerlEditor 俺はEmEditor派
自動色分けが充実してる、って要求だけなら分かるけど、 Perl専用じゃないといけない理由って何?
781 :
デフォルトの名無しさん :2007/08/04(土) 23:07:28
ファイルハンドルに聞くと 今開いているファイルパスが返ってくる ファイルハンドルってない? IO::Fileだと答えてくれないみたいなの。。
>>781 ファイルを開いた後でそのファイルがunlinkされたりrenameされたりした
場合はどうして欲しいの?
むむ、考えてませんでした。 でもunlinkされてもcloseするまでは確か中身読めるはずだったから unlink,rename前のパス返してくれればよいです。
ファイルを開けてる時点でパスは分ってるもんじゃないのか? use Cwd qw(abs_file); それとも↑レベルの話?
>771 専用ではないが、Eclipseという手も……ないか。
786 :
781 :2007/08/05(日) 00:40:48
>>784 いや、文字列の相対パスを文字列の絶対パスに変換したいんじゃなくて
ファイルハンドルに問い合わせると、
ハンドルを作るのに使ったパスを答えてくれるような、もっと単純なものです。
確かにファイルオープン時にパスは分かってるのですが
関数受け渡しとかでハンドルとパスとと似たようなものを2つも渡すのはなんだかな、と。
ささいなものなので自分で作れば良いのですが、もし既にあるならそちらを使いたいなと…
>719 use Quantum::Superpositions; if ($x == any($a, $b, $c)) { ... }
>781 FileHandle::Deluxeあたり使えるかもしれない。
それ、以前あった質問とまんま 同じじゃん。 関数の引数受け渡しがシンプルになるから、って理由まで。 それは管理が糞なんだよ。 そのアホ設計をやり直せ。
>>719 map{$risutonoyouso{$_}=1}@list;
if(exists $risutonoyouso{$target}) {....
791 :
781 :2007/08/05(日) 01:23:16
>>788 インストールしました。すごい、ほんとにデラックスだ〜
ファイルロックまで付いている
$fh->contentsもイカしてます。
ありがd!です。
792 :
790 :2007/08/05(日) 01:24:46
existsは無くてもよかった。 if($risutonoyouso{$target}){....
793 :
781 :2007/08/05(日) 01:30:40
>>789 あらま。ハンドル渡しで関数作っといて
後からファイル名も必要になるような仕様変更って
あまり無いですかね?
ファイルハンドルとパスって近い存在だから同じオブジェクトから取り出せるように
抽象化しておいたほうがいいんじゃないかと思うのですが…
そういうもんでもないの?
Eclipse は環境構築するのにゴリゴリやらんといけないし、無駄にでかい環境になっちゃうから 個人での開発では大それたものかもしれない
>793 $datafile->{'path'} = '〜'; $datafile->{'FH'} だのを自分でちまちまセットすりゃぁいいかと
ソケットだってファイルハンドルだし・・・、ファイルシステムに依存したら抽象レベル下がりすぎワロタ Javaで言ったらInputStreamにgetFileNameがあるようなモンじゃないの?
>>793 ハンドルはあくまでファイル記述子の抽象だから、だろ
ファイル記述子やファイル名はinodeだのvnodeだのへの参照だが、
ファイル記述子とファイル名には直接の相関は無い。
ソケットやパイプのように、ファイル名の無いファイル記述子も有り得るし、
rename()やunlink()によって、オープンファイルとファイル名のリンクが
切れることもある。
>789 前にその質問したアホだけど。 結局後から全部書き直したんだよね。確かに設計が腐ってた。
799 :
781 :2007/08/05(日) 02:30:11
どもご教授ありがとうございます。 そうすると、ハンドルで受け取る関数は あくまでもその受け取ったストリームの処理に徹するべきで ファイル名がどうのとかは、仕様変更とかあっても 関数内で扱わないようにするのがベストパターンなのかな? 確かにそう思えてきた!!!そうします!
800 :
デフォルトの名無しさん :2007/08/05(日) 15:19:47
>>780 つかいはじめるときに
使用言語をperlって
設定する方法がわからないんだよっ、ボケ!
馬鹿はPerl使わなくていいよ
802 :
デフォルトの名無しさん :2007/08/05(日) 15:25:31
※別ウィンドウで開きます ↑これを英語に翻訳するんだけど、 *opens in new window とかってしようと思うんだけど、 perlのソースコード中に *アスタリスクを不用意に使ってもおk?
秀丸とかエムエディタは拡張子で判別して自動的に色分け設定が変わるよ ちなみにエムエディタならF11で設定切り替えできる
問題ない
805 :
デフォルトの名無しさん :2007/08/05(日) 15:37:52
>>804 勝手にポインタとして識別されてしまって
コード全体がぶっこわれるとかない?
>>805 むしろどんな言語だったらそうなるのか聞きたい
>>802 不用意に使うのはやめろ!!!
地下の自爆装置が作動する可能性があるぞ!!
808 :
デフォルトの名無しさん :2007/08/06(月) 00:15:33
今本読んだけど、乗算として 認識される可能性があるから やめたほうがいいと思った。 2バイト文字を使えない環境で perlで、強調文字はなにをつかえばいい?
コメント内で認識も何もないだろう
わろた
811 :
デフォルトの名無しさん :2007/08/06(月) 00:35:31
>>809 コメントじゃないよ!
HTMLに出力されて画面に
表示される部分だよ!
そうかお!
HTML なら em タグだろ?
814 :
デフォルトの名無しさん :2007/08/06(月) 01:30:36
>>813 うーん、、、
タグを出力する方法がわからないので
記号で強調するやりかたをかんがえてくれませんか?
タグを出力すればいいんじゃないの?
816 :
デフォルトの名無しさん :2007/08/06(月) 01:49:37
アスペルガーもたいがいにしろや タグを出力する方法がわからないから 他のやり方をかんがえろといってるではないか
817 :
デフォルトの名無しさん :2007/08/06(月) 01:50:10
sageれボケ
なに言ってるのかワカンネイけど、日本語をPerlスクリプトに含めたくないならテンプレでも使えば?
ファッキンクソアスペルガー タグを出力する方法がわからない、って言ってるだろうが
いまさらFizzBuzzかよ
$sum = sub { my @arg = @_; my $retval += splice @arg, 0, 1; @arg and $retval += $sum->(@arg); $retval > 9 and $retval = &{$sum}(split //, $retval); $retval; }; print map { my $p; $p = 'Fizz' if $sum->(split //) =~ /[369]/; (!(split //)[-1] or !((split //)[-1] - 5)) && ($p .= 'Buzz'); ($p || $_), $/; } 1..100; こうですか?わかりません!><
ちゃんと rand とかも使えよ
824 :
デフォルトの名無しさん :2007/08/06(月) 20:18:10
ActivePerl で ${^WIDE_SYSTEM_CALLS} って機能してないんですか? ちょっとググってみたけど分からないので、仕方なく2ちゃんねるで質問させてください。 検証用のコードは下記なのですが、-d でディレクトリの存在がテストできません。 (新しいフォルダ は、あらかじめ作成してあります) #!perl -w -C use utf8; binmode STDOUT, ":encoding(cp932)"; use Encode; ${^WIDE_SYSTEM_CALLS} = 1; print "\${^WIDE_SYSTEM_CALLS} = ",${^WIDE_SYSTEM_CALLS},"\n"; print "新しいフォルダ\n"; print (-d "新しいフォルダ") ? " - あり\n" : " - なし\n"; print (-d encode('cp932', "新しいフォルダ")) ? " - あり\n" : " - なし\n"; いや、できないんならできないで諦めますんで。できたら便利だな〜っと思っただけですから。 やはり perl って、日本語もマトモに扱えないクソ言語なのでしょうか?
print +(
>>824 >やはり perl って、日本語もマトモに扱えないクソ言語なのでしょうか?
そんなわけないとおもうよ
もともとNSAで盗聴してきた大量の
文章を管理するために作った言語だから
828 :
デフォルトの名無しさん :2007/08/07(火) 20:41:21
>>826 RESありがとうございました。
${^WIDE_SYSTEM_CALLS} が使えるのは 5.6 までだったんですね。
現在の 5.8 では廃止されちゃったんですね。
そんな事とは知らずに、1日つぶしちゃいました。
${^WIDE_SYSTEM_CALLS} が使えれば楽できる、と思ったんですが
世の中そんなに甘くないという事ですか。
結局、perl では日本語が扱えないことがハッキリ分かったので
心置きなく perl を捨てることが出来ます。
これで明日から encode("cp932", ほげ) 地獄から開放されます。
他の言語だと10行くらい書かなきゃいけないことも、
perl なら1行で済んでしまう、そんな気安さから長い間ずっとお世話になってきましたが。
日本語を扱うようになってから、かえって perl の方が手間がかかるようになってしまって・・・
もうこれ以上ムリです。限界です。心底疲れました。
さようなら、perl。長い間ありがとう。
encode("cp932", __FILE__) 市ね
encode("cp932", $ARGV[0]) 市ね
readdir 市ね
キモすぎ
頭悪いと大変だな
バカに825が見えなかったらしいから、はっきり書いておくと #!perl -w -C use utf8; binmode STDOUT, ":encoding(cp932)"; use Encode; print "新しいフォルダ\n"; print +(-d "新しいフォルダ") ? " - あり\n" : " - なし\n"; print +(-d encode('cp932', "新しいフォルダ")) ? " - あり\n" : " - なし\n"; でもキミみたいなのは、いないほうが良いので帰ってこないでね。
答えなかったらもうperl使わずに済んだのにわざわざ引き戻すなよw
>>832 つまり必ずA系のAPIを使ってるのか
iTunesとかが良くこしらえるウムラウトとかアクサン記号含むファイルはアウトだね
${^WIDE_SYSTEM_CALL}に相当するモノが無くなったのは厳しいよね。
>>828 いってること矛盾しとるがな
・・・ってこれ釣りなのか
>>835 use utf8してる場合は、透過でUTF-16に変換してW系API使って欲しいもんだが
それは贅沢ってもんかねぇ
ま、Win9x系の悪しき遺産のお陰で、UTF-16なパス名他に対応してない
プログラムなんて山のようにあるけどさ
10月の5.10に期待しようぜ
839 :
デフォルトの名無しさん :2007/08/08(水) 02:30:06
>>832 で?キミはいったい何がしたいワケ?
長いこと2ちゃんねるやってるけどさ、
ここまで頭の悪いヤツはじめて見たよ。
あいたたたたた・・・
840 :
デフォルトの名無しさん :2007/08/08(水) 02:50:31
天延記念物級バカ晒し上げwww 832 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/07(火) 23:07:02 バカに825が見えなかったらしいから、はっきり書いておくと #!perl -w -C use utf8; binmode STDOUT, ":encoding(cp932)"; use Encode; print "新しいフォルダ\n"; print +(-d "新しいフォルダ") ? " - あり\n" : " - なし\n"; print +(-d encode('cp932', "新しいフォルダ")) ? " - あり\n" : " - なし\n"; でもキミみたいなのは、いないほうが良いので帰ってこないでね。
夏だな。 変なのが湧くからイタイやつの相手はしないでスルーするように。
842 :
デフォルトの名無しさん :2007/08/08(水) 07:31:17
Perl 5.0です。 サブルーチンを使用する前に、そのサブルーチンのプロトタイプ宣言(この名称が正しいかどうかは分かりません。Cみたいなやつ)を 必ず記述しなければならないようにする仕組みがあればお願いします。 use strictじゃダメみたい。 やっぱ無理にでもPerlのバージョン上げた方がいいのかなあ……。
>>842 その仕組みをなぜ必要としているのかを説明できる?
>>837 いや、use utf8しなくてもutf8フラグが立っている文字列の時はW系を使って欲しい。
そのためのutf8フラグだと思うし。
845 :
842 :2007/08/08(水) 09:11:12
>843 よく書き忘れて、期待通りに動かないのを悩んだりするから。 それだけじゃダメ?
>>845 サブルーチンを使うより前にコンパイルされるよう書けば済む話だよね?
#!/usr/bin/perl -w
sub foo($) { ... }
blah blah blah...
とか
#!/usr/bin/perl -w
use Fanctions qw(foo); # サブルーチン群は Fanctions.pm に定義
blah blah blah...
とかでよくない?
847 :
845 :2007/08/08(水) 17:32:21
>846 まあ、そうなんですけどねー。 サブルーチン群が先頭に来ると、何かイライラしない? 俺だけ? もちろん、別ファイルにするのも手ではあるんですけど 再利用の予定が無いサブルーチンとか、規模によっては(管理が)面倒かな、と。 とにかくアドバイスありがとです。
そのアンカーの方がイライラする
C言語を知ったら発狂するだろうな
850 :
845 :2007/08/08(水) 19:17:03
>>848 申し訳ない、アンカーが「>」だけでも補完してくれる専ブラを使ってたもんで、つい。
ずっと前に、「>>」にしない方がサーバに優しいなんて話もあってけど、最近はめっきり聞かないなあ。
>>849 先頭にサブルーチンの本体がずらずら書かれるのが、個人的に嫌というだけで、
プロトタイプ宣言だけが並んでる分には問題ないのよ。
なんで?って聞かれると困るけど。
あと、Cだと最終的には1つバイナリになることも多いから、
ソースファイル自体が多くてもそんなに面倒じゃないというのもあるかもしれない。
>>850 キミ、言い訳が多い ってよく言われるでしょ
さすが上辺だけの人間w
底辺万歳♪
先に宣言だけしておいて、 メインルーチンの後で定義したらいいじゃん。 #!/usr/bin/perl sub foo($); sub bar(;@); # ほげほげする exit; sub foo ($) { #実装 } sub bar (;@) { #実装 }
その話をしてるんだろ?
10年くらい前は www.yahoo.com でなくて www.yahoo.com/ ←スラッシュ を入れてブラウザのURLバーに入力してよね、 だってそうじゃないとサーバーに負担がかかるから♪ ってキャンペーンが一時期あったが、いつのまにか 見なくなった。
その話をしてるんだろ?
>>856 規格上、ルートのスラッシュはあってもなくても一緒。
問題になるのはそれ以下のパス区切りのスラッシュ
伝統的に、ある種の馬鹿が断固理解したがらない単語です。
すみません クライアントからのファイルアップロード処理を作っているのですが、 open( GETFILE, $upfile ); binmode GETFILE; と普通にやってもAnHttpDで構築したサーバーなら動作しますが レンタルサーバーに上げるとファイルオープンエラーになってしまいます。 フリーで配布されているアップロードのソースを見ても普通に上記処理で 上げることになっているようですが、いくつかのレンタルサーバーを試して みましたがことごとくエラーになります。 どういった原因が考えられるでしょうか?ご教授お願いいたします。
どういうエラーが出てるんだよ。
>>863 > どういった原因が考えられるでしょうか?
クイズ出してるの?
>>864 すみません。
正常な動作が不可能となるようなエラーです。
よろしくお願いします。
ふいたwwwwwwww
はあ
俺も正常な動作が不可能
エラーをブラウザに出力するようにしれ
あれ、いつもならCGIスレ行けって言うのに、今回は言わないの? 十中八九権限だと思うけどナー
inet_aton()、pack_sockaddr_in()、socket()、connect()を使ってソケットを接続し、 send()やrecv()でおしゃべりをしています。 このソケットが壊れたことを検知する方法にはどのようなものがあるでしょうか。 fileno(),vec(),select()を使ってみましたが、 ルータモデムの電源が切れたときなど検知しないことが多々あります。 また、ソケットが壊れる要因としてどのようなことが考えられるでしょうか。 Cで作ったと思われるフリーウェアソフトと自作Perlスクリプトで 同じサーバに接続しているのですが、Perlだけ通信ができない状態になります。 (send()/select()に問題がないのにサーバとの通信ができなくなる) 24時間サーバとconnectしっぱなしで、不定期に2,3回/dayで壊れます。。。
権限が原因なとき、 「権限の設定がおかしいので再確認してください」 ってな感じのエラーメッセージはだせないのかね?
>>873 keepalive, heartbeatでぐぐれ
>>874 Permission denied とか出るよ
>>875 サーバはIRCサーバなのですが、関係あるでしょうか。
また、ping代わりにPINGリクエストを1分に一回打っています。
定期的に切断されるならまだ理解できるのですが、全くの不定期なので・・・
878 :
デフォルトの名無しさん :2007/08/10(金) 00:58:48
my $result = `./a.out`などのように外部のプログラムを呼び出した時に 一定時間経っても終了しなかった場合に強制終了して Perl側のスクリプトを続行させる方法ってありますか?
タイムアウト処理ならevalとalarmを使うのが一般的だとは思いますが、 外部プログラムを呼び出したときはどうなるんでしょう。。。
>>877 サーバの種類は関係ない。
回線がどっかで切れようが、何かパケットを送らないことには検知することはできん。
そしてsend()によってパケットを送ろうとした場合も、即座にはエラーにならない
(send()は正常終了するだろう)が、いずれはTCPスタックが切断を検知するので、
それ以後(普通は)アプリ側でもエラーを知ることが出来るはずだ。
そのようにならないとすれば、コーディングに何か問題があるか、
処理系のバグだろうな。
>>877 > また、ping代わりにPINGリクエストを1分に一回打っています。
ひでえ
>>882 直訳でスマソ。
it can pull in definitions of subroutines and such from other files
それは(it)サブルーチンの定義(definitions of subroutines)などを(and such)
他のファイル(other files)から(from)取り込む事が出来る(can pull in)
in time to be visible to the rest of the compile and run time.
見えるようになった(to be visible)時(time)、
コンパイル(compile)、実行時(run time)等々(to the rest of the)に(in)
>>883 ありがとーー
これでぐっすり寝れます♪
変なユニコードで保存されたファイルを修正するプログラムを作っていて open IN, "<./file/input.txt"; open OUT, ">./file/output.txt"; while(<IN>){ s/"\x0D \x0A \x00 \x0D"/"\x0A"/; s/"\x0D \x0A"/"\x0A"/; print OUT $_; } という風に単純に作ったのですがoutputファイルは作成されるものの 何も変化なくちゃんと動作しません。 何かテキストデータを16進数で読み込む方法でもあるのでしょうか? よろしくお願いします。 あと、できれば保存する再にウニコードから JISもしくはEUCに変換する方法もあればお願いします。
>>880 >それ以後(普通は)アプリ側でもエラーを知ることが出来るはずだ。
その知る方法とはどんなものでしょう?
>>881 個人サーバで許可取ってあるので問題ないです。
>>885 えすぱー。
#!/usr/bin/perl -w
use strict;
use Encode qw(from_to);
my($InFile, $OutFile, $InCode, $OutCode) = ('./input.txt', './output.txt', '', 'euc-jp');
my $buffer;
{
open my $in, '<', $InFile or die $!;
read $in, $buffer, -s $in or die $!;
close $in;
}
$buffer =~ s/(?<=\x0D\x0A)\x00\x0D//g;
from_to($buffer, $OutCode, $InCode);
$buffer =~ s/\x0D\x0A/\n/g;
$buffer =~ tr/\r/\n/;
{
open my $out, '>', $OutFile or die $!;
print $out $buffer;
close $out;
}
__END__
$OutCode は適切なものを。
888 :
887 :2007/08/10(金) 11:35:27
× $outCode は適切なものを。 ○ $InCode は適切なものを。
「情報小出し君」の問題点は、ある程度情報を小出しにした後でさえ、 あとどれだけ隠しているのか分からないことにある。
少し知っただけで全てわかったような気分になるような人間であり 自分が小出ししてる意識さえないのが最大の問題点である
だっておもえら情報を全部だしたら発狂するじゃん
RequireFile するときには、同一ディレクトリに あるファイルしかリクワイアーできないと 直感的に思ったんだが、いま扱ってる 他人の書いたソース見ると、 下位フォルダにぶちこんである ファイルを普通にリクワイアして ちゃんと動いてるみたい、パスも 通してないのに、なぜ? あるいはパスを通してるの?
>>892 お前の先祖がモノリスに触れたときからの全てをだ
だいたい情報を小出しにするって文句が出ること自体が アスペルガーなんだよな 知りたい情報があるなら言えばいいじゃん
perlにおいて{}カーリーで 囲まれてる文字列は、 なんの可能性がある?
>>896 だよな。
せっかく質問に答える機会を与えてやってるのに、生意気なんだよ。
なにさまのつもりなんだか。
質問者というのは基本的に、スレと回答者の両方を救っているわけだからな。 いくらPerlの回答ごときで自尊心が満たされる器の小さい馬鹿とはいえ、 もうちょっと敬意を表することを覚えるべき。
>>897 文字列限定なら、、、
q{hoge}, qq{hoge} # ' "
m{hoge} # regexp
s{hoge}{foo} # regexp
print {HOGE} # filehandle
{die} # block <= 卑怯
って適当にあげても幾らでもあるんだが何か?
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
最近は、プログラミング演習の課題を出さないので話を聞くと、 「自分でやるのが面倒なので××君のを写させてもらおうと思ったのだけど、 写させてくれないので出せませんでした。××君がわるいのだから、 ぼくが単位をもらえないのは納得できません!!」 と教授の目を真っ直ぐに見て話す大学生もいるそうだから。
904 :
デフォルトの名無しさん :2007/08/11(土) 13:06:42
情報を小出しにすると、必然的に質問者と回答者のやり取りが多くなる。 最初に全ての情報を書いておけば、余計なリソースを使わずに済む。 それは時間の短縮にも繋がるし、閲覧者側も理解し易く大変有益な方法。 質問者ありきのスレ"だけ"だと思い、質問者を神様と思い込んでる 自己中ノータリンは親の教育方針を疑った方が良いですよ:-P 育ちが悪いか、遺伝子レベルで腐ってるので生まれ変わる事をオススメします。
>>904 ここは2ちゃんねるですよ
ある一定の方向性を持たせようたって無理に決まってるじゃないですか
方向性を持たせようとして板を作ってもこうやって厨房が沸くからスルーしか方法はないと思います
>>896 >>898 >>899 ネタだよな? な? ニュー速とかでこんな書き込みを見ても
即ネタだと理解出来るが、専門板では本気でキチガイが居るから
おじさん物凄く心配なのだが、夏休みだからだよね? ね?
「質問者は情報を小出しにしないほうが良い」 「荒らしやキチガイ相手にはスルー推奨」 どちらも多くの人間がその正当性を主張し、 特につっこみどころのない良マナーであるにもかかわらず、 なぜか双方とも説得力がイマイチなのはどうしてだろう?
>>907 正当性を主張しているというより荒れることに対して不満を言っているということに近いからでは?
"マナー"や"常識"みたいな人間によって 変化する物に説得力が無いのは当然
まったく、2ちゃんでの質問マナーをプロミスのCMでやって欲しいよ
そうそう、教えて君こそ、2chでのマナーだからね。
逆に小出しな質問の方が好きかな うちは顧客が優秀すぎていつも的確すぐる質問ばかり受けてて ごくたまにくるキチガイ丸出しな電話への応対がとっさに出来ないから こういうアホばっかり集まる場があると、応対の練習ができて とても便利なんだよね
はいはい
こんなとこで応対の練習してそうなヤツなんか見た事無い
そりゃ今適当に思いついた理由を並べただけだから
他所でやれ
だれか質問してやりなよ
ちょっと日本語関係でトラブってるんですけど質問してもいいですか?
ダメです
Perlがうごきません。いろいろ試しましたがダメでした。どうしたらいいですか?
掲示板が荒らされて困ってます。 荒らしを防ぐプログラムの作り方を初心者にもわかるように教えて下さい。
2chが初心者に荒らされて困ってます。 初心者を防ぐプログラムの作り方を初心者にもわかるように教えて下さい。
どうしたらいいですか?
その前に初心者から脱却する意志があるのか答えていただこうか。
>>918 違います
ちょっと疲れてるだけです
>>921 Pを小文字にするといいと思います
>>922 ログを記録しているファイルのパーミッションを644にすると良いです
>>923 自己矛盾はバグの元です
気を付けましょう
>>924 できればもう少しネタを返しやすい書き方をしてください
>>925 初心者から脱却するためには何日くらい勉強したらいいですか?
┏━┓ ┏━┓ ┏━┓ ┏ ┏━━━━━━━━┓┏━┛ ┗━┓ ┃ ┃ ┃ ┗━━━━┓ ┃ ┏┓ ┏┓ ┃ ┃ ┃┗━┓ ┏━┛ ┃ ┃ ┏━┛ ┏━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━┓ ┃┏━┛ ┗━┓ ┃ ┃ ┗━┓ ┏┛ ┃ ┃ ┃ ┃ ┃┗━┓ ┏━┛ ┃ ┃━┓┏┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃┏━┛ ┗┓ ┃ ┃┃┃ ┏┛ ┃ ┏━┛ ┃ ┃ ┏━━┛ ┃┃┏┓┏┓┗┓ ┃ ┏┓┃┃┃.┏┛ ┃ ┃┏┓ ┗┓ ┃ ┏ ┓ ┃ ┃ ┏┛┃┗┛┃┗┓┗┓┃ ┃┃┗┛┃┃┏┓┃ ┃┗┛┏┓┗┓ ┃ ┃ ┃. ┃ ┛ ┗━━━┛ ┗━━┛ ┗━┛┗━┛┗━━┛┗┛┗┛ ┗━━┛┗━┛ ┗ ┗━┛┗━┛
MMOみたいにレベルが表示されるといいのにね
どんなレベル付けするんだよ よほど上手い仕組みじゃないと 変なアホコテが穴ばかり付いて高Lvになるぜ
目に悪そうな色分けだな。
【 これはアメ公の環境だと 表示できないのかな。 うっかり見落としがちだけど。
http://kazato.run.buttobi.net/cgi-bin/upload/src/viprpg_tktk0316.png $disp.=$TD."sales items featured item<BR>【total skill】【business start】 comment"
これで、
【
(すみつき中カッコ)
はアメ公の環境で表示されないので
[(スクエア)
に変更しようと思うんだが、
ダブルクオーテーションで囲まれてる部分”○○”
に、不用意に
[スクエアブラケット
を入れて問題が起きないかどうか?
つまり
$disp.=$TD."sales items featured item<BR>[total skill][business start] comment"
にしようとたくらんでるわけだが。perlの文法的にだいじょうぶなのか。
perl -wc
その例は大丈夫だけど、たとえばこういうのはだめだろうな。 "$x【hoge】" → "$x[hoge]"
>>937 ダブルクオーテーションの中に
$が入っていないから、
今回の例ではおkって意味?
いやそれは配列の添え字になってしまうから だめという意味なのかな?
CGIゲームのソースコードを Windows上のエディターで変更しているのですが、 保存するときに、シフトJISで保存しても大丈夫なのですか? 実行はレンタルサーバーなので、EUCで保存しないと ぶっこわれるのではないかと不安で夜も眠れません
そのまま寝ずにお考えください
CGIゲームのソースコードを Windows上のエディターで変更しているのですが、 保存するときに、シフトJISで保存しても大丈夫なのですか? 実行はレンタルサーバーなので、EUCで保存しないと ぶっこわれるのではないかと不安で夜も眠れません 2回目。
そのまま寝ずにお考えください 2回目。
CGIゲームのソースコードを Windows上のエディターで変更しているのですが、 保存するときに、シフトJISで保存しても大丈夫なのですか? 実行はレンタルサーバーなので、EUCで保存しないと ぶっこわれるのではないかと不安で夜も眠れません
そのまま寝ずにお考えください
FFFTPだったら ファイルの拡張子が.cgiだったら 自動的にシフトJIS→EUCに 転送時に勝手に変更してくれるみたい
アメリカ人が作ってるテキストエディターは 保存時に、漢字コードを何にするのか、 シフトJISで保存するのか、EUCで保存するのか、 なんてことは聞いてこないのですか?
so cool
perlの文法中で [ (スクエアブラケット を使ったらいけない場面というのは どうやったらカンタンに見分けられるのですか?
C5の問題を回避するには、 文字コードはEUCを選択したほうがいいのですか? シフトJISだと、 表示 って書きたい場合でも 表¥示 ってかかないと、文字化けするってどっかにかいてあって、 それをしたくなければEUCだったら大丈夫って書いてあるんですけど、 EUCで保存してだいじょうぶですか? 変更作業自体はWindows上で行うんですけど、 EUCで保存したらWindowsで読めなくならないですか?
もう不安がなくなったのか
これからUTF-8がデフォになるから、UTF-8Nにしとけ
UTF-8 は日本語のデータ量が増えるからウンコじゃん。
どんだけでかいファイルだよ
>>952 EUC 扱えるテキストエディタを拾ってくればいい。
(1)自分がWindows上でソースコードの 編集作業をしているということを考慮すれば シフトJISで保存したほうが無難 なぜならWindowsはシフトJISしか使えないので EUCとかで保存したら漢字が文字化けして 編集作業ができなくなるのではないか? (2)しかしUNIXで動いているレンタルサーバー上で perlのCGIとして動かすというのならEUCで保存したほうが いいのでは?なぜなら表¥とかC5の問題があるし、 シフトJISだといちいち表¥と打たないと文字化けするが EUCならそんな心配はないから。 (3)それとも、保存時にシフトJISで保存しても FFFTPで転送時に勝手にEUCに変更してくれるの?
>>957 漢字コードをEUCで保存したとしても、
そのテキストエディタ自体がEUCを
サポートしていれば、編集作業で
文字化けすることはないってことですか?
でもWindows付属のメモ帳でこんど
読めなくなりますね?
Windows上で編集するときには
メモ帳でも読めるように、シフトJISで保存しておいて、
サーバーに転送するときにFFFTPなどが
勝手にEUCに変換してくれると、一番うれしいですか?
でもオリジナルのソースコードを見ると
表¥
とか書いてあるので、オリジナル版の作者は
シフトJISで作ったと思うんですよ。
オリジナルの作者がシフトJISで作ったものを
その中の一部だけEUCに変更したら
まずくないですか?
全体のファイルが50とかあって、
その中の2つだけをEUCにするとか。
他のファイルからデーターを読み込みにきたときなんかに
不具合を起こさないですか?
おまえは>957さんの回答を100回以上読んでからGoogleで検索しる
まずプログラムを学び、試行錯誤してからまた来て下さい まだ何もやらないうちから心配ばかりとかアフォかと
「問題点1」 Windows上で編集作業をするには どの文字コードを選ぶべきか? 「問題点その2」 UNIXで動作するレンタルサーバー上で perlのCGIとして動作させるときに どの文字コードを選ぶべきか? 「問題点その3」 FFFTPなどのFTPソフトで、 転送時に漢字コードを変換してくれる 機能がサポートされている可能性がある 「問題点その4」 オリジナルのソースを書いた作者さんは 表¥ などの表記をしているところを見ると シフトJISで作成したのではないか? この場合、勝手に一部のファイルを EUCに変換して問題は生じないのか?
つまりファイルが50あって (1)シフトJIS (2)シフトJIS (3)シフトJIS (4)EUC (5)EUC こんな状態になって問題ないのか? (1)から(5)を読み込んだりとか、 普通にあるとおもいます。
utf-8nを使えって
>>959 シフトJIS で統一するか、EUC で統一するか、だな。
シフトJIS で統一するなら、\ を注意深く埋め込む必要がある。
EUC で統一するなら、\ を消していく必要がある。
>>965 やっぱり統一しないとだめなのかな?
ただ、いまやってる作業は
日本語版のCGIゲームを英語版に
翻訳する、って作業なので、
日本語部分はちょっとづつ減っていって
最終的には日本語は完全になくなるはずなんですよ。
それでperlでCGIって話の場合、
絶対シフトJISでなければいけない、とか
絶対EUCでなければいけない、とか
そういう制限はないわけですよね?
ただシフトJISだったらWindows上で編集するときに
便利ですよ、っていうメリットと、
表¥っていちいちいれないといけないデメリットと、
EUCだったらwindows上で編集できないデメリットと、
windows上でもEUCを扱えるエディターを持ってこないと
編集できないデメリットと、
C5文字を使っても¥とかいれずとも文字化けしないメリットと、
あるわけですが、コード自体は、結局
「統一しなければならない」
って結論で誰も異論はないですか?
ファイルが50あって、
1−25はシフトJIS、
26−50はEUC、
こんなばらばらでCGIの動作が不具合を起こさないか、
ってことです。
英語版になるんなら文字コードなんて気にしなくていいじゃん。 最終的には ASCII オンリーになるんだし。
>>966 > ただシフトJISだったらWindows上で編集するときに
> 便利ですよ、っていうメリットと、
どこがどう便利なのかと
ただHTML出力された状態を見ないと 翻訳もできないわけで。 表¥ の¥をいちいち削除するのは不可能なので、 現状、クライアント側でもサーバー側でも シフトJISで統一することにします だってEUCにしたら¥をいちいち全部削除しなければ ならないから。それは不可能でしょ。 でもさ、ソースコード中の表示される部分、 ユーザーの目から見える部分は英語化するけど、 変数とかは日本語のままにするつもりなんだよね $山田とか この場合、どうなのかな? CGIで出力されたHTMLのテキストについての文字コードって議論と、 perkのソースコード中に含まれた漢字の文字コードについての議論と、 2つあるとおもう。 つまり、printされてユーザーの目にふれる部分は全部英語に翻訳するので 最終的には文字コード関係なくなるかもしれないが、 ソースコード中に含まれた変数の部分$山田とか、は日本語のままで いくつもりなので、サーバー上には日本語があいかわらず含まれた ままで運用されるわけだが、このときも漢字コードについて 気にしなればならないのか? ファイルを保存するときにどの漢字コードにするべきか? サーバーに転送するときにどこの漢字コードにするべきか? ソースコード中に含まれている漢字の取り扱いはどうなっているのですか?
>CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
>>968 メモ帳で開ける。メモ帳で読める。
Windowsで動くテキストエディターは
シフトJISでないと文字化けするものも結構ある
windows上でEUCのファイルを扱いたければ
わざわざEUC対応って書いてあるものをもってくる
必要がある。シフトJISだったらそんな必要ない
既に用意されているソースはもうちゃんとしてるって分かっていて、 自分で日本語を追加する必要もないんでしょ? なら、シフトJIS のまま扱えばいいじゃん。 何か問題あるのか?
表¥を表に一括置換すればいいじゃんw とにかくメモ帳なんか使うな
英語版完成したら当然アメ公にプレイさせるわけだが アメ公のブラウザの初期設定ってシフトJISとかに なってるのかな? たぶん英語(US-ascii)とかになってるんじゃないかな。 その環境でシフトJISのページ?を表示させて大丈夫なのかな。 もちろんユーザーの目にするテクストは全部1バイト文字に翻訳 するつもりだが、ソースコード内部の変数名は日本語のまま 運用するつもりなんだ。$山田とか。 そしたらユーザーの目にする部分は1バイト文字だけど、 ソースコードの内部には2バイト文字が残っているわけでしょう。 この場合、そのファイルはシフトJISで保存すべきなのか? EUCで保存すべきなのか?US-asciiとかで保存すべきなのか? ということがわからないんですよ。
CGIで出力するHTMLは当然明示的に content type charaset=US-asciiなんちゃら、 って書きますけど、問題はソースコードの内部に 残った漢字の部分なんです。 そのファイル自体は、なんの漢字コードで 保存すべきなのか?
ようはCGIのファイル自体はシフトJISで保存されていて、 ユーザーが目にする部分はUS-asciiとかで、 っていう、2重構造で問題ないのかと。
こうも「試す」ってのをやらないのもめずらしいな
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
そんなに心配なら日本語の変数名も全部英訳したら
print "a" とかって部分があったとして、 そのaは半角だから、 ずべてにたいして互換性があるのですか? このファイル自体はシフトJISのキャラセットで 保存されています。つまりそのaもシフトJISだと 思うんです。そうやって出力されたaをアメ公の 環境で見たときに、どうなるのか。
>>979 心配しているだけで実際の被害はゼロだと思うんですよ
アメ公は 「このaはUS-asciiのaだ」 と思い込んで閲覧するわけですが、 本当はそのaはシフトJISのaなんです。 だから文字化けするのではないですか?
英数コードに文字コードもクソも…
それとも半角英数については すべてのキャラセットにおいて 共通の文字コードが使われているので、 文字化けを心配する必要はない、 こういうことですか?
明らかに日本人ではないな 今後ヌルー推奨で
ソースコード中に日本語の漢字が含まれている場合、 そのファイルはシフトJIS、もしくはEUCで保存しないと だめなのですか? US-asciiとかで保存したらだめなのですか?
次スレ以降相手にしない事 質問を装った荒らしとして 規制議論にスレ立てて報告
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
[ スクエアブラケット を使ってはいけない場面、 というのは限定されていて、 おぼえられる範囲なのでしょうか?
でもさ、将来アメ公のプルグラマと 共同作業することになって、 そいつにシフトJISで保存された ソースコードを送ったら、 そいつは英語版windows+英語のエディター という環境で、こっちが送ったソースを まともに開けるのか?
プルグラマwwwwwwwwwwwwwwwwwwwwwww
そもそもシフト JIS の時に \ を挟む必要があるのは Perl がシフト JIS に対応していないから。
996 :
992 :2007/08/13(月) 17:50:38
自己解決しました
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。