"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板
ttp://pc11.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
ttp://www.perl.org/get.html ● 2008/01/11現在の最新版: 5.10.0
● 2007/01/11現在の開発版: 5.9.5
前スレ
Perlについての質問箱 33箱目
http://pc11.2ch.net/test/read.cgi/tech/1192463997/ リンク集は
>>2-3 過去スレは
>>4 あたり
7 :
デフォルトの名無しさん:2008/01/11(金) 14:30:54
基本中の基本で申し訳ない。
リストを集合と見なして、和、積などの演算を提供するモジュールでポピュラーなのあったっけ?
Set::Array
CGI::Lite にある、url_encode 相当の関数って、
CGI.pm には入ってないので、自前でやるしかない。
で、あってる?
escapeHTML ってのはあるんだけどなぁ。
(= CGI::Lite で言うところの、browser_escape)
>>9 use URI::Escape
じゃあ、いかんのかね?
日本語Cookieのエンコードに助かりました。。>> URI::Escape
12 :
デフォルトの名無しさん:2008/01/12(土) 22:32:26
パールのオブジェクト指向ってどうなのよ?
使う方はそれほどでもないが、書くのは結構めどい
>>13 そか? むしろOOってこんなに簡単だったんだ、とオモタが。
[Hoge.pm]
package Hoge;
sub new {
my $class = shift;
return bless({@_}, $class);
}
sub fuga {
my ($self, $world) = @_;
print "$self->{hello}, $world\n";
}
1;
[hoge.pl]
use Hoge;
my $h = new Hoge(hello => "HELLO");
$h->fuga("WORLD");
Perl使いからすれば、な。
他のOOPLを先にやっちゃった人だと、ちと辛くなる。
何かOOPL自体を実装してる気分になる。
17 :
デフォルトの名無しさん:2008/01/13(日) 02:18:45
構造体の要素をprintで表示させたいのですがどのようにしたらよいでしょうか?
struct Person => {
name => '$',
son => '@',
doughter => '@'
};
$person[$i] = Cell->new();
$person[$i]->son($j, 'taroh');
$person[$i]->doughter($k, 'hanako');
みたいにたくさんの人がいて、
人によって息子と娘の数は違います。
下の書き方だと表示できません。よろしくお願いします。
for ($i = 0; $i <= $#person; $i++){
print $person[$i]->name;
print ' son: ';
for ($j = 0; $j <= $#{$person[$i]->son($j)}; $j++){ ←この行でダメと怒られる
print $person[$i]->son($j);
}
print ' doughter: ';
for ($j = 0; $j <= $#{$person[$i]->doughter($j)}; $j++){
print $person[$i]->doughter($j);
}
printf "\n";
}
またデバッグしないエラー隠蔽者か。
>>17 まずは、ソースの頭にこの二行を追加してください。
あとは、ガイダンスに従ってプログラムを修正してください。
use string;
use warning;
20 :
17:2008/01/13(日) 17:18:11
for ($j = 0; $j <= $#{$person[$i]->son($j)}; $j++){ ←この行でダメと怒られる
↓
for ($j = 0; $j <= $#{$person[$i]->son; $j++){
で解決しました。
use string; を入れると、グローバル変数に文句を言われて、my を使ってみると
$person[$i] がなぜかできなくなるので使ってないです。
~~~
落書き程度のプログラムならいいけど、
ちゃんとしたのを書くときはstrictとwarningプラグマをつけて書くようにしたほうがいいよ。
何かエラーが出るなら、コードにバグなりバグの原因が潜んでるってことだから。
ひえええ(悲鳴)
forでmyを使えばいいし、
そもそもPerlではforeachにしたほうがいい
strictとwarningsは 必 須
foreach my $i (0 .. $#person)
25 :
17:2008/01/13(日) 19:47:54
>21-24
すみません。strict と warnings は使うようにします。foreach にもします。
>$person[$i] がなぜかできなくなるので使ってないです。
については、
my $person[$i] = Person->new();
↓
my @person = Person->new();
にしたらローカル変数使えました。どうもありがとうございました。
for (my $i = 0; ......
そもそも$i,$jが必要なのかなぁと思ったり。。。
個人の力量に応じて色々書けるところがPerlのいいところなのに
マイルール押し付けすぎじゃね?
力がないからこそエラーチェック機構に頼るべきだろう
warningsは必ずしも使わないな。
あまり教条主義的になるのもよくない
31 :
デフォルトの名無しさん:2008/01/13(日) 23:40:27
ここの人はPerlでプログラムをバリバリに書くの?
そこそこに大きくなりそうな時は、やっぱCにしようって思わない?
>31
Perlで書かなければならないときはPerlで書くし、
Cで書かなければならない時はCで書く。
サンプルを作るのはPerlで、
速さが必要なときは、特定部分だけCにしてる
>>30 それは分かってて使わないってことだろ?
上のは使うことすら知らなかったわけだから
環境によっては使えない、なんてことも。
そもそもPerlかCなんて、そんなに選択範囲小さくないです
最近、PerlとRubyとElispで組み合わさって動くものばかり書いている。
PerlとRubyくらいまとめたい。
39 :
デフォルトの名無しさん:2008/01/14(月) 16:39:51
少しプログラムで詰まりました。
ローカルサーバー上では
$i = rindex($add,"\\");
という入力をすることでうまく行きますが
借りてるサーバに上げる場合は
$i = rindex($add,"/");
と改変しなければ動かないプログラムがありまして、
出来れば、ローカルと借りてるサーバ両方でうまく処理が行くようにしたいのですけど、
いい方法ないでしょうか?
多分パスのセパレータの違いが出てるんだろうけど・・
\か/に正規化すれば?もしくはシステムが使ってるパスのセパレータを取得してそれを使う
$add =~tr/\\/\//;
$i = rindex($add, "/");
41 :
デフォルトの名無しさん:2008/01/14(月) 16:58:36
File::Spec
43 :
デフォルトの名無しさん:2008/01/14(月) 18:33:59
CPANがエラーで動きません。どうすればよいのでしょうか?
やったこと
・相手のサーバーがダウンしてるのかと数箇所、変更しましたが変わらず
・数個のモジュールを試すが全部、同じエラー
-------------------------------------------
Fetching with LWP:
ftp://*****************
LWP failed with code[500] message[Errno architecture (i386-linux-thread-multi-2.4.21-27.0.2.elsmp) does not match executable architecture (i386-linux-thread-multi-2.6.9-34.elsmp) at /usr/lib/perl5/site_perl/5.8.6/Errno.pm line 11.
Compilation failed in require at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Socket.pm line 17.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Socket.pm line 17.
Compilation failed in require at /usr/lib/perl5/5.8.6/Net/FTP.pm line 18.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.6/Net/FTP.pm line 18.
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.6/LWP/Protocol/ftp.pm line 24.
]
Fetching with Net::FTP:
ftp://*****************
Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.6/CPAN.pm line 2251.
>>43 > CPANがエラーで動きません。どうすればよいのでしょうか?
エラーを解消する。
45 :
デフォルトの名無しさん:2008/01/14(月) 22:22:58
Perl/Tkってどうよ?
46 :
43:2008/01/15(火) 08:40:40
エラーの原因が特定できないんです。わかる方いますでしょうか?
Can't locate object method "new" via package "Net::FTP"
48 :
43:2008/01/15(火) 10:24:27
Net::FTPがないってことで
cpan>install Net::FTP
でもエラーが出ますし,,,,
CPAN使わないで入れろよ・・・
50 :
43:2008/01/15(火) 12:01:41
( ̄◇ ̄;)エッ
yum? どこかに解説ありますでしょうか??
>>48 > Net::FTPがないってことで
> cpan>install Net::FTP
> でもエラーが出ますし,,,,
誰にそんなデタラメ吹き込まれたの?
問題はこれじゃねの
> LWP failed with code[500] message[Errno architecture (i386-linux-thread-multi-2.4.21-27.0.2.elsmp) does not match executable architecture (i386-linux-thread-multi-2.6.9-34.elsmp) at /usr/lib/perl5/site_perl/5.8.6/Errno.pm line 11.
53 :
43:2008/01/15(火) 13:14:31
cpan> install Net::FTP
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
Database was generated on Thu, 10 Jan 2008 22:37:46 GMT
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
ftp://ftp.kddilabs.jp/CPAN/authors/01mailrc.txt.gz LWP failed with code[500] message[Errno architecture (i386-linux-thread-multi-2.4.21-27.0.2.elsmp) does not match executable architecture (i386-linux-thread-multi-2.6.9-34.elsmp) at /usr/lib/perl5/site_perl/5.8.6/Errno.pm line 11.
Compilation failed in require at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Socket.pm line 17.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Socket.pm line 17.
Compilation failed in require at /usr/lib/perl5/5.8.6/Net/FTP.pm line 18.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.6/Net/FTP.pm line 18.
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.6/LWP/Protocol/ftp.pm line 24.
]
Fetching with Net::FTP:
ftp://ftp.kddilabs.jp/CPAN/authors/01mailrc.txt.gz Can't locate object method "new" via package "Net::FTP" at /usr/lib/perl5/5.8.6/CPAN.pm line 2251.
54 :
43:2008/01/15(火) 13:15:38
>>52サン
それっとド〜すれば... (o*。_。)oペコッ
55 :
43:2008/01/15(火) 13:33:54
56 :
デフォルトの名無しさん:2008/01/15(火) 15:56:02
ひどすぎる……「車のバックミラーが壊れかけてプラプラしているので
引きちぎって捨てました」的解決。
57 :
デフォルトの名無しさん:2008/01/15(火) 15:59:14
>>54 お前の環境もお前が使っているLinuxディストリビューションの
パッケージシステムの管理体制も知らんからわからん。
エラーメッセージで示されているファイル群を見れば何が起きているかわかるだろ。
58 :
43:2008/01/15(火) 21:38:15
そんなの関係ねぇ!
そんなの関係ねぇ!
○∧〃
/ >
< \
Foo/Const.pmに存在する
Foo::Const;というパッケージから
Const以下をMainにExportし
Const::〜 というアクセス方法を提供するにはどのようにしたら良いでしょうか?
require で複数のサブルーチンを取り込みたいんですが、
require 'subroutin1.pl';
require 'subroutin2.pl';
と書くとうまくいきません。
両方とも読み込む方法はないでしょうか?
「うまくいきません」(笑)
エスパーの出番だ。
65 :
デフォルトの名無しさん:2008/01/17(木) 01:30:06
なんか今朝から具合が悪いです。
いい薬はありませんか?
>>61>>67 普通に
use CGI::Carp qw(fatalsToBrowswr);
を書いておけば良いのと違うの?
69 :
デフォルトの名無しさん:2008/01/17(木) 22:26:42
変数に読み込んだzipファイルを展開したいんですが、どうすればよいでしょうか。
Compress::Zlib::memGunzip()を試しましたが、zipのためかうまくいきませんでした。
(undefが返る)
すみませんが、お知恵を貸してください。
Archive::Zip
71 :
69:2008/01/17(木) 23:06:41
>70
Archive::Zipでできますか?
use IO::Uncompress::Unzip qw(unzip $UnzipError) ;
とりあえずこれで解決できそうです。
なぜか2chで聞くと自己解決につながる不思議!
Archive:;Zipもみてみますね。どうもありがとう
72 :
デフォルトの名無しさん:2008/01/17(木) 23:14:42
>>69 日本語でおk?
変数に入ってるのは、zipファイルのファイル名 "なんとか.zip" が入ってるの?
それとも、メモリー中で圧縮された状態のデータそのものが入ってるの?
圧縮されたファイルを解凍したいだけなら、
google で 「perl zip 解凍」 を検索すれば参考になるコードがみつかるよ。
73 :
69:2008/01/17(木) 23:19:54
変数に入っているのは、zipデータのバイナリそのものです。
ファイル名やファイルハンドルではありません。
74 :
デフォルトの名無しさん:2008/01/18(金) 10:35:27
>>74 なぜ動かないのかをつきとめて、そこを動くように修正すると良い。
ニコの仕様が変わったからじゃね?
使ったこと無いけどWWW::NicoVideoっつーのがCPANにあるから見てみれば
あとPlaggerにもぷらぎんあるかあr
いまいち頭の中でまとまってないけどuse strictを使い
cのヘッダファイルのように変数を一元管理するにはどうしたらいい?
例
##hoge.pl
use strict
$hoge = 'hoge';
print $hoge;
require 'piyo.pl';
print $hoge;
##piyo.pl
$hoge='piyo';
use strictコメントアウト時はhogepiyoだけど
Global symbol "$hoge" requires explicit package name at ./strict.pl line 3.
Global symbol "$hoge" requires explicit package name at ./strict.pl line 4.
Global symbol "$hoge" requires explicit package name at ./strict.pl line 6.
Execution of ./strict.pl aborted due to compilation errors.
と怒られるorz
@argv = ( 1 .. 5);
@argv[1] = ( 1 ..5);
なデータがあるんですけど、
@argv[1]のリストの数を調べたいときは、どうするんですかね?
$#argv[1]とすると、syntx errorになります。
それ以前の部分で理解が足りてないと思う
>>78 > @argv[1] = ( 1 ..5);
これはどういう意味だ?
($argv[1]) = (1 .. 5)
と等価か?
どういう意味も何も無いだろ・・・
配列の要素にリストを代入したい ←無理
配列を表すらしい@を付ければできるんじゃね?
つーところかと
ケチらずにリャマ本ぐらい読んでもよさそうなものだという気もするが。
配列の要素に、"a b"のようなスペースを挟んでいるものがあります。
これをスペースでsplitして2次元配列にしたいのですが、
そのようなことはできませんか?
できるよ
がんばれ
86 :
74:2008/01/18(金) 18:58:10
自己解決
Crypt::SSLeay入れたら動きました
if文使うときif($a eq "a" or $a eq "b")みたいに同じ変数の中身を判定する部分をまとめる(/a|b/)みたいにする方法ってあります?
$a =~ m(^[ab]$)
>>87 if ($a =~ m/^(a|b)$/)
if (grep { $a eq $_ } qw(a b))
:
好きなように書け
確か[]より|のが速い
そんなはずがないだろうと思ってベンチ取ったが、やはりそんなはずはなかった。
use strict;
use Benchmark;
timethese(2000000, {
Alternation => sub{ my $x = "abcdefghijk"; my $y = $x =~ /(?:d|e|f)/ },
CharacterClass => sub{ my $x = "abcdefghijk"; my $y = $x =~ /[def]/ },
});
>> Benchmark: timing 2000000 iterations of Alternation, CharacterClass...
>> Alternation: 3 wallclock secs ( 2.45 usr + 0.00 sys = 2.45 CPU) @ 815328.17/s (n=2000000)
>> CharacterClass: 1 wallclock secs ( 1.41 usr + 0.00 sys = 1.41 CPU) @ 1422475.11/s (n=2000000)
>>77 相反する(しかも管理しづらそうな)ことをする理由は分からないけど、
エラーメッセージの通りパッケージ名を付けるだけで怒られないようにはできる
use strict;
$main::hoge = "hoge";
print $main::hoge;
>>93 相反するってのは例が悪かったって事で勘弁を。
>>77の例でいうと$hogeはhoge.plでは変更しない。
#hoge.pl
use strict;
my($hoge);
$hoge='hoge';
require 'piyo.pl';
print $piyo;
#piyo.pl
$piyo='piyo'
でhoge.plを実行すると
Global symbol "$piyo" requires explicit package name と怒られる。
#piyo.pl
package piyo
を追加して
#hoge.pl
print $piyo::piyo;
とすれば怒られないけど hoge.pl内$piyoですます方法ないのかな?
95 :
77:2008/01/19(土) 14:49:54
77だが解決した。
#hoge.pl
use strict;
our($piyo);
require 'piyo.pl';
print $piyo;
#piyo.pl
$piyo='piyo'
11 12
13 14
15 16
のように、1行に2つのデータを持ったファイルがあります。
これを、
list[0][0] = 11;
list[0][1] = 12;
list[1][0] = 13;
list[1][1] = 14;
list[2][0] = 15;
list[2][1] = 16;
のように二次元配列にしたいのですが、どのようにすれば良いのでしょうか?
my @list;
push @list, [map int, split] while(<DATA>);
__DATA__
11 12
13 14
15 16
>>97 ありがとうございます。
コードを説明して頂けませんか?
99 :
デフォルトの名無しさん:2008/01/20(日) 01:06:20
↑
本を読まない。
ネットを検索しない。
誰かが教えてくれるのをじっと待っているだけ。
つねに受身の態勢。
本は持っていません。
ネットは検索しました。
回答を待っています。
受身の人間は質問しません。
多次元配列の操作についてなんですが、
@aと@bによる二次元の配列@xを作る際に、
for $i (0..$#a){
$x[0][$i] = $a[$i];
}
for $i (0..$#b){
$x[1][$i] = $b[$i];
}
多次元配列 @x の i 行目の配列を一次元の配列 @c に移し変えるのに、
for $j (0..$#{$x[$i]}){
$c[$j] = $x[$i][$j];
}
というコードを書いてるんですが、もっと奇麗な書き方はありませんか?
>@aと@bによる二次元の配列@xを作る
@x = (\@a, \@b);
>多次元配列 @x の i 行目の配列を一次元の配列 @c に移し変える
@c = @{@x[i]};
「続・初めてのPerl」のような参考書をお読みください。
「多次元配列」、「二次元配列」、その過てる認識がドツボへといざなう
>>102 ありがとうございました。
参考書を買って一通り読んだほうがよさそうですね。
アドバイスありがとうございました。
>>102 × @c = @{@x[i]};
○ @c = @{$x[i]};
106 :
デフォルトの名無しさん:2008/01/20(日) 22:02:02
>>100 ム板で言う「受け身」は「わからんから教えてくれ」の事だぞコラ
hoge や fuga を試したけど moge や munya のエラーになって
困っています。xxx.net や ○●の本を確認したけれど××の所
の通りで間違っていないコードかと思ったんですが。タスケテ
の様に複数の試行錯誤と複数の情報確認をひっさげてポストしてみ
二次元配列?
Perlの配列の要素はスカラーですよ?
いま本読んでるところだよきっと!
>>91 速さを求めるなら、正規表現の | より、正規表現使わないで or のほうが速いぞ
110 :
デフォルトの名無しさん:2008/01/21(月) 22:29:32
>>97 やっと理解できたよ。map なんて昔からあった?
大昔から
昔っていうと範囲が曖昧だけど、とりあえず前世紀の産物だしな。
僕らが生まれてくるずっとずっと前にはもう
map, grep を知ると、出来るだけそれを使ってプログラムを作りたくなる。
>115
なんとなくだが、その気持ちは分かった気がする。
そして後で泣く
>>115 そのままLISPerになっちゃえばいいのにw
>>115 前にも同じこと言ったけど中二病だよね。あれって。
forのかわりにmap使うボケが多すぎたので、voidコンテクストなるものが導入されました。
昔はgrep/mapのほうがforより速かったからなぁ。
122 :
デフォルトの名無しさん:2008/01/22(火) 18:23:02
たしかに。多言語に書き換えるときに泣くよね。
perl はプロトタイプとして使うな。
有る程度ロジックの検証ができたらCなりjavaなりに書き換える。
だから perl 固有すぎる命令は使いたくないね。
map のつかいかたを一所懸命覚えても、何の糧にもならないし。
123 :
デフォルトの名無しさん:2008/01/22(火) 18:24:23
122s/多言語/他言語/p
また for厨 が暴れてるのか
125 :
デフォルトの名無しさん:2008/01/22(火) 19:58:09
perl/Tkの参考になるサイトおしえて
126 :
デフォルトの名無しさん:2008/01/22(火) 20:18:47
perl/Tkもいちじはやってたけど、Qt始めてから使わなくなった。
でっていう
Google検索でいっぱい出てくるじゃん
構造体の要素に多次元配列を使いたいです。
struct A => {
aaa => '@', ←ふつうの配列
bbb => '@' ←これを多次元配列にしたい
};
$A->aaa(0, 'a0000'); ←これと
$A->aaa(1, 'a1111'); ←これはよいとして
$A->bbb(0, 0, 'b0000'); ←これはダメ
$A->bbb(0, {0, 'b0000'}); ←これもダメ
$A->bbb({0, 0}, 'b0000'); ←これもダメ
どう書けばよいですか?お願いします。
perlに多次元配列なんてものはないが、
配列のリファレンスの配列にすればいい。
>>129 $A->aaa->[0] = 'a0000';
$A->bbb->[0][0] = 'b0000';
こんなんじゃあかんの?
132 :
129:2008/01/23(水) 22:22:24
レスどうもありがとうございます。
>130
perlに多次元配列はないという噂は聞きますが
これまでCと同じ感覚で使ってました。プログラマじゃないので許してください。
>131
そんな記述できるのですね。
やりたかったことです。ありがとうございました。
言葉として、n次元配列という時はある。配列のリファレンスの配列、とか言いたくないよ!
一人っきりの部屋で、言う機会もないくせに。
意味は通じるから多次元配列でも問題ない。
リファのリファとか言うより伝わりやすい。
厳密なのは仕様書書きとかがやればいい。
多次元配列言う奴は多次元配列としてしか使わんからなあ
$hash{'a','b'}でハッシュを二次元配列のように使うとかなかった?
普通の配列でやればいい
>>137 $hash{'a-b'}みたいなもんだし多次元のつもりでやると想定外のことになりうるからあまり勧められんね。
keysとかで簡単に拾うこともできんし。
unix epoch より過去を unix time で扱うにはどうすればいいでしょうか。
いまテストしてる環境はWinXP SP2 (5.1.2600) + ActivePerl 5.8.8 です(一応)。
142 :
デフォルトの名無しさん:2008/01/24(木) 02:20:59
ビッグバンより前の宇宙
>>141 そもそもunixtimeの定義からして無理だろ。
負の数を正の整数で表現するにはどうしたらいいですか? みたいなもんだ。
自前の日付表現方法考えろ。
>>143 どうもです。
unix time定義の厳密な定義はわかりませんが、仮に整数のみであるとしても
負数から計算してタイムスタンプなり配列なりを返す実装はありそうかなと思って。
もうちょっと探してみて、なさそうなら他の手を考えます。
訂正:「整数のみ」→「正の整数のみ」
>>135 分かってる人間どうしで言うのは構わんけど
ここで「多次元配列使いたい」って質問してくる人はたぶん分かってないと思うぞ
>>146 なんの話題をしたいかによる。
今はどこも過疎ってるけどね。
MLは使わなくなったなぁ。
ダイアルアップ時代の産物だと感じるねぇ
>>149 ダイアルアップ時代になって、メールをプロバイダに取りに行くように
なって利点が無くなったもんだよ。
>>150 じゃその利点があったとかいう時代に
日本で活動していたMLなんていくつあったの?
>>151 MLはクローズドな空間を構成するために使われていたから、日本でいくつなんて、
数えられるわけないだろ。
とりあえず私は、あるとき、メールがオフィスタイムに平均して3秒に1通来る状態に
なって、biff - メール到来通知エージェントがつねにフラグを立てている状態になっ
て、調べてみると72のMLに入っていたので、入っているMLを整理したことがある。
あとになって調べてみると、POPが出てきた時に、「これはMLを殺すぞ」と
指摘していた人がいるんだよね。まあ、その通りになったわけで。
読みづらい文章だな
何の話ししてんだろ
はなししとは?
プログラマってこういうツッコミ好きなやつほんと多いよな
以上、俺の自作自演
えー、続きましてー
今でもML使ってるよ。昔に比べると流量少ないけど。
ダイアルアップとは関係なく、コミュニティ・ツールが変わったのが大きい気がする。
perlな方々はblogやIRCで済ませてる人が多いみたいだし。
慣れてない人には不親切かもしんない。
ML衰退は他にもウイルスとか迷惑メールの増加の時期とシンクロしてた様にも。
しかし投稿を一気に落として、必要な書き込み作ってアップロードって作業は
時間が限られた電話回線時代にはマッチしてた様に思うね。
今、特に常時接続になってからはMLでもなんでもクライアントでは
データコピーを持たない、ASPスタイルこそが時代の流れと
なっていったと思う。
オンライン辞書の類は地味ながら個人的にはここ10年でも
指折りの革新的なツールだと思ってるお。
特殊変数だとおもうのですが、$,の使い方を教えてください。
イマイチよくわかりません。
$,=" ";
としても
すべての変数に空白がつくわけではないようですし・・・
perlvar嫁
163 :
デフォルトの名無しさん:2008/01/24(木) 22:49:43
google 「perl 特殊変数」
ircは日本語perlのコミュが会話に入りづらい雰囲気
↑お前、日本語が下手だから会話に来なくてけっこう
>>161 暇だから答えよう。
$, = ' ';
@a = ('a'..'f);
print @a;
みたいな時に配列の間に半角スペースが入るってだけ。
print "@a";
の間には $" で指定。こっちはデフォで半角スペース入ってる。
たしかにircは内輪ネタが分からない奴はお断りの雰囲気がある
join関数の方が高速
ユリウス使うと良いのかもかも。@うに刻以前
171 :
デフォルトの名無しさん:2008/01/26(土) 13:20:13
初歩的な質問ですがお願いします。
open関数でテキストドキュメントを読み込んで
表示するという初歩の操作を試しているのですが、
"invalid argument "というメッセージがでてきて
ファイルが開けません。
スクリプトは単純ですが以下の構造です。
open(F , ">C:\Perl\text.txt") || die " stupid : $!\n";
while(<F>) {
print;
}
close(F);
ファイルはtext.txtです。パスも間違っていません。どうすれば
よろしいでしょうか?
一冊入門書を(仮にわからないとこがあっても)通読した方が良いよ。
英語で言うと、I is bookみたいな状態。
>>171 print ">C:\Perl\text.txt", "\n";
とでもして、おまいが何をしようとしているかを確認してみろ。
基本的なことかもしれませんが…
Windowsでながーい(256文字以上の)ファイル名使っている場合に
ファイル名は取得できるのですが
そのファイルサイズなどを取得する方法がわかりません。
短いファイル名ならサイズの取得も可能なのですが
非常に長いファイル名だとサイズに0が帰ってきます。
もしよかったらサイズ取得の方法をヒントだけでも結構ですので
教えてもらえませんか?
絶対できるのは間違いないとは思うのですが…
WebProgのテンプレをこっちにも入れたいな。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
176 :
174:2008/01/26(土) 20:13:11
大変申し訳ありません。
あの後、考えてみたら
Win32::UTCFileTime
を使ってなんとかなりそうな雰囲気です。
少なくともいくつかの例ではうまくいきました。
お騒がせして大変申し訳ありませんでした。
もうちょっと自分で考えないとだめですね…
177 :
デフォルトの名無しさん:2008/01/26(土) 20:17:23
>>171 こりゃひどいね。
キミは、自分が何をしたいのかが分かってないみたいだね。
どこをどう直せばいいのか、教えるのは簡単だが
それはキミにとって良くない。
入門書を読むことをオススメするよ。
>>167 ありがとう。
これからはperldoc読みます。
プログラム言語は奥が深い。
三十路にはキツイザンス
下のファイルを読んで、XXX, YYY, ZZZのいずれかでなければ
値を取り込むプログラムを作りたいです。
====
AAA
BBB
CCC
……
====
my @prohibit = ('XXX', 'YYY', 'ZZZ');
my @keep;
if ($_ !~ /$prohibit[0]/ && $_ !~ /$prohibit[1]/ && $_ !~ /$prohibit[2]/ ) {
push @keep, $_;
}
とすればまあできるんですが、
my @prohibit に禁止文字の追加や削除をしたときに困ってしまいます。
if ($_ !~ /@prohibit/ ) はエラーになります。
下の $ifif を作っても if 文が中身を把握してくれません。どのようにすればよいでしょうか?
my $ifif;
foreach my $i (0 .. $#{@prohibit}) {
$ifif = $ifif . sprintf " \$prohibit\[$i\] =\~ \/\^%s\/ \&\&", $prohibit[$i];
}
$ifif = $ifif . ' 0 == 0';
なんか宿題みたいなの多いなあ。
半年授業をサボってたんだから、少しは自分で勉強しろよ。
>>180 my $regex = join '|', map quotemeta, @prohibit;
if ($_ !~ /$regex/) { ...
>>170 ありがとうございます。
単純なインクリメントで日単位の処理をしたいだけだったので
Date::Calc(::Object)で対応しました、という報告をしにきたところでした。
ユリウス暦とはまったく思いつきませんでしたが、Date::CalcはA.D.以降なので
ユリウス→グレゴリオ変換のほうが対応できる範囲が広がりますね。
まぁ20世紀を処理するだけなのでどっちもオーバースペックですがw
184 :
180:2008/01/27(日) 00:09:34
>182
ありがとうございました!!
Perlインストールしたんだけど
どうやってアンインストールしたらいいの?
フォルダ削除だけで平気?
>>180 こういうのもありかしら?
for my $value (<DATA>){
%prohibit = map +($_, 1), qw|XXX YYY ZZZ|;
push @keep, $_ unless exists prohibit{$_};
}
exit;
__END__
AAA
GGG
ZZZ
YYY
ZZZ
XXX
HHH
>>183 月の満ち欠けを画像出力するときに、ユリウスを使って計算をしたことがありましたから(゚∀゚)アヒャ
>>185 念のためrootタソになって、# rm -rf 推奨♪
ディレクトリではなくフォルダと言うあたりWindowsか?
>>186 なんかおかしいよな(´・ω・`)
my %prohibit = map +($_, 1), qw|XXX YYY ZZZ|;
my @keep;
for my $value (<DATA>){
push @keep, $value unless exists prohibit{$value};
}
exit;
__END__
AAA
GGG
ZZZ
YYY
ZZZ
XXX
HHH
>>187 そうなんです
まだ高校生でで思うように開発環境整えられないからさ
Regexp::Assembleでいいと思うよ。
perlの開発環境なんて本体と標準のメモ帳ありゃできるっしょ。
>>188 なんかあえて難解な書き方にしてるような。
読めるようになってくると戻り値を変数に入れるのが面倒になってくるよ。
Winだとインストールが面倒(できない)モジュールがあったりするよ。
まぁ中級後半くらいまでは充分だと思うけど。
そのへんがPerlのまずいところでもある。
モジュール頼みのPerlなのに、モジュールがインストールできなくて
ユーザーが離れていってしまうという。
かと言って初心者にいきなりUNIX系OSのPCをひとつ用意しろとか
Winにcygwinを導入してPerl使えとかいうのも酷な感じもする。
まあcygwin perlもCPANで入れられないモジュールもあるらしいけどなあ。
VMwarePlayerで
サードパーティのPPM含めりゃ大抵の物はあるだろ。
colinuxで
VC++入れてnmakeとclにパス通してCPAN.pmを中心に使ってるが
しばしばmake中にエラーが出るので、その場合にはPPMも使ってる。
CPAN.pmとPPMを併用することによるエラーも出てきてるのかもしれないが、
いずれにせよWinにおけるモジュール管理のノウハウをもうちょっと蓄積したいね。
ActivePerl 5.8.8.822を入れたんですが、ppmを使おうとすると
failed: unable to open database file(1)
と表示されて起動できません。
ppm-shellは起動できるんですがinstallの段階で同じエラーになります。
どうやらユーザー名にマルチバイト文字が入っているせいらしいんですが
エラーを避ける方法はありませんか?
200 :
デフォルトの名無しさん:2008/01/27(日) 22:50:58
Perl/Tkでスプレッドシートの Widgetを作成したいのですが、
ActivePerlでどのモジュールを利用するのか、分かりません。取り敢え
ず、Tk::TableMatrixをppmのコマンドでinstall Tk-TableMatrixでインストールし
ましたが、サンプルのコードが動きません。ActibePerlのバージョンは
This is perl, v5.8.7 built for MSWin32-x86-multi-threadとなって
います。
調べていたらuse Tk::TableMatrix;の1行のみのソースでもエラーが出
ます。エラーの内容は、下記です。
Had to create Tk::XlibVtab unexpectedly at C:/ActivePerl/lib/DynaLoader.pm line 253.
Use of uninitialized value in subroutine entry at C:/ActivePerl/lib/DynaLoader.pm line 253.
15.pl syntax OK
インストールに失敗しているのでしょうか? Perl/Tkの他の
Widgetについては、ボタン、ラベル、メニューについては動きます。全
てのテストはしていませんが。ppmのqueryではTk-XlibVtabはありませ
ん。searchでは、ActivePerlのリポジトリーにはありません。
そもそもが、スプレッドシートを使う時に、ActivePerlでどのモジュー
ルが必要なのかと言う事も理解していません。
恐れ入りますが、分かる方がいらっしゃいましたら、ご教授願います。
Perl/Tkでスプレッドシートが出来なければ、わざわざPerl/TkのGUIを
覚える必要もありませんから。宜しくお願いします。
なんでこうなるのかよく分からないので教えてください。
■テスト1
・CORE::GLOBAL::exitは呼ばれず、終了してしまいます。
#!/usr/bin/perl
use strict;
*CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)};
exit(1);
1;
■テスト2
・事前にSample.pmを作成します。
package Sample;
use strict;
use warnings;
*CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)};
1;
・CORE::GLOBAL::exitが呼ばれます。
#!/usr/bin/perl
use strict;
*CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)};
exit(1);
1;
■動作確認環境
This is perl, v5.8.5 built for i386-linux-thread-multi
This is perl, v5.8.8 built for x86_64-linux-thread-multi
すみません。テスト2のコードが間違ってました。
#!/usr/bin/perl
use strict;
use Sample;
exit(1);
>>201 SET ACTIVEPERL_PPM_HOME=C:\Perl\ppm で起動できました
これで枕を高くして眠れます
ありがとうございます
>>202 コンパイラがexitキーワードを解決するときの *CORE::GLOBAL::exit の問題。
#!/usr/bin/perl
BEGIN {
*CORE::GLOBAL::exit = sub { printf "exit(%s)\n",join(',',@_);CORE::exit(@_)};
}
exit 1; # この行が(実行ではなく)コンパイルされる時の *CORE::GLOBAL::exit
206 :
デフォルトの名無しさん:2008/01/29(火) 10:53:21
my @a = (1, 2, 3, (4, 5));
のように配列の中に配列を入れたいんですが、できますか?
やっぱり、リファレンスを使うべきなんでしょうか?
べきっつうか、リファレンス使わないと出来ない
208 :
デフォルトの名無しさん:2008/01/29(火) 16:01:58
linux版CPANを入れたらcpan shellに出入りするたびに
Terminal does not support AddHistory.
Terminal does not support GetHistory.
と言われるんですが、これは何ですか。
readlineがないとか?
210 :
デフォルトの名無しさん:2008/01/29(火) 17:32:43
>>209 Bundle::CPANのことでしょうか?
入ってるし機能しているはずなんですが・・・。
cpan>
で上下矢印キー押すとコマンド履歴出てくるから入ってる証拠ですよね。
おかしいです。
とりあえず、ソースコードをメッセージテキストでgrepしてみるところから
探求をはじめなよ。
212 :
デフォルトの名無しさん:2008/01/29(火) 18:38:12
>>211 あっ!!そういう手があるんですね。
hackですね。ww
213 :
デフォルトの名無しさん:2008/01/29(火) 20:38:01
やはり分からないのでおたずねします。
cpanの入れ直しから始めて、cpan setup後に
cpan >install Bundle::CPAN
をして、途中で
----
Ah, I see you already have installed libnet before.
do you want to modify/update your configuration(y|n)? [no]
----
とあったのですが、これはどういう意味ですか?
(英語としての意味じゃなくて、その中身です。何を指してるんでしょう。)
ソース見てもソース自体がよく分からなかったです。
214 :
デフォルトの名無しさん:2008/01/29(火) 20:41:34
あと
enter arithmetic or perl expression: exit
はexitのままEnterで良いですか?
いずれもメッセージ本文でGoogle検索してみたものの英語力不足のせいか
全く目当ての情報が見つかりませんでした。
>>213 中身て?
単に、設定ファイル上書きしていいか 聞かれてるだけだけど…
216 :
デフォルトの名無しさん:2008/01/29(火) 21:18:58
>>215 中身というのは
「設定ファイルを上書き」
というのが何かという意味です。
perlに慣れた人ならすぐ分かるのでしょうが、私は慣れていないので
ピンとこない、といえば伝わるでしょうか?
慣れたもなにもcpanの設定を変えていいかどうかを聞いてるだけやがな
218 :
デフォルトの名無しさん:2008/01/29(火) 21:27:42
2時間もいろいろ調べ続けてこれなんです。
英語は分かるので英語的な意味は分かるんですが、それが「何を指しているか」
が分からないんですよ。
言葉って指すものについての経験が不足していると伝わらないでしょう。
パソコンを触ったことがない人にアルゴリズムの話をしても伝わらないように。
冷静に考えてみてください。
それに、上で引用した
----
Ah, I see you already have installed libnet before.
do you want to modify/update your configuration(y|n)? [no]
----
にしたって、その部分の意味は英語の分かる私にはわかりますが、
文脈が分からないのですよ。
言葉って断片だけでは意味をなさなくて、背景の理解があって初めて、
その言葉が理解できるものでしょう。
なので、私がこのメッセージがチンプンカンプンだというのはそういうことです。
それで、どうすればいいんですか?
cpanという言葉もよく分かっていない状態なのですが、
設定というのも何を指すか分からないですが、
cpanの設定を変えていいかはどう判断したらいいんですか?
よろしくお願いします。
自分の書いた設定を書き換えられるのに抵抗を感じるならno。
さもなくばyes.
>>218 日本語でおk。
要は、「どんな情報があって、それが何を意味していて、その情報を書き換えられたらどうなるのか、ということがわからない」と言いたいんだな?
221 :
デフォルトの名無しさん:2008/01/29(火) 22:22:50
いいえ、ケフィアです。
222 :
デフォルトの名無しさん:2008/01/29(火) 22:26:14
>>219 ありがとうございます。結局よく分かりません。
noにして大きなトラブルが生じそうになかったのでnoにしました。
では、代わりに。これも昨日から発生している問題なのですが、
cpan -fi [modname]
としたときに
Unknown option : f
と出ます。
Bundle::CPANを入れたらforceオプションが使えるようになると聞いたのですが、
このようになります。
ただし、cpanシェルのなかに入って
cpan[1]>force install [modname]
という操作なら出来ます。
出来ないのは、普通にシェルのコマンドライン上で
$ cpan -fi [modname]
とすることによるforceインストールが出来ません。
代わりに普通のインストールが行われてしまいます。
"unknown option: force" - Google 検索
http://www.google.co.jp/search?num=30&hl=ja&q=%22unknown%20option%3A%20force%22&lr= 17件しか引っかからず、よく分かりません。
Bundle::CPAN
223 :
デフォルトの名無しさん:2008/01/29(火) 22:30:38
>>220 質問の意味がよく分かりません。
私が言いたかったのは断片だけでは言葉って意味をなさないということです。
文章的な文脈と知覚経験的な文脈とがあって意味をなすということです。
つまり、
----
Ah, I see you already have installed libnet before.
do you want to modify/update your configuration(y|n)? [no]
----
が分からないという質問に対して2度も直訳的な回答をされたのに対して
それでは伝わらないと言ったまでです。
経験がないとかいう問題じゃなくて、単に理解力・想像力がないだけだろ。
225 :
デフォルトの名無しさん:2008/01/29(火) 22:39:55
>>224 いいえ、正確には、このケースで必要とされる理解力と背景知識がなかった、です。
それで、背景知識としてどういったものが必要なのかが分からないので手がかりが欲しくて
上記の質問をしたのです。
理解力なんて測定できなくて曖昧なものを頼りにしていても仕方ないので、
まず背景知識を摂取する、そこがスタートだと考えました。
>>214については、そのままEnterでOKだと分かりました。
>>222が分からないので調査中です。
227 :
デフォルトの名無しさん:2008/01/29(火) 23:01:51
>>225 理屈ばっかりこねて行動力の無いタイプだな
>>223 yes入力してみればどうなるか分かるだろうに。
230 :
デフォルトの名無しさん:2008/01/30(水) 00:39:16
>>227 理屈をこねたかどうかが大事なのではなくて、理屈が正しいか、
そして理屈が有効かが大事なんですよ。
正しくないor無効な理屈をこねていて、なおかつ行動もしていないのなら
あなたは私を批判する権利があります。
しかし、残念ながらこのケースではそれに該当しません。
それに、私は
>>224に対して
>>225を言ったということを忘れないでください。
>>224で想像力がないと断定されたのに対して
>>225はその反論です。
決して無駄なおしゃべりをしたのではありません。
>>228 yes入力してみましたよ。noも。3回くらいはやって何が起きたかを観察しましたが
違いが分かりませんでした。
231 :
デフォルトの名無しさん:2008/01/30(水) 00:39:53
>>229 >ネットワーク周りの設定を改めて行うか
>どうか問われている事ぐらい容易に想像できるだろ?
もちろんです。ですがそれ以上は想像できません。つまり、それ以上は「背景知識」を
摂取することで補完する必要がありました。
なぜ補完の必要があったか、それは以下のことが分からなかったからです。
1. たしかにlibnetと書かれているし調査の結果libnetがネットワーク関連だということも
分かったが、聞かれているのが本当にlibnetについてなのか、つまり、
do you want to modify/update your configuration(y|n)? [no]
というのは「configuration of libnet」の意味なのか
2. my configurationをmodifyとあるが私はこれまでにlibnetの設定をした記憶がない。
なのに、my configurationとはどういうことか。
3. configurationをなぜ今する必要があるのか
4. 今configurationの各項目をいい加減に決めてもconfigurationをあとで修正できるのか
5. もしそうなら知る必要があるconfigurationの保管場所はどこか
ここはお前の哲学を語るスレじゃない。
>>231 この"configuration"は「設定」というより、「構成」なんだろうよ。
Perlの話をしなさい。
ここは自分の思想を押し付けるスレじゃない。
英語が分かるなら英語圏のユーザーに
聞けばいいんじゃねえの?
IDが無い板なんだからコテハンつけてほしいな
あぼーんする手間が面倒だよ
>>231 ドラゴンボールの中でフリーザが一番好きです まで読んだ
>>233 そうなのですか。参考にします。
>>232>>234 とんだ誤解ですね。私は決めつけられた誤解に対して答えただけですよ。
うらむ相手が間違っています。
それに私は私の哲学をどこで語っているんでしょうか。
Perlに関する質問のやりとりのなかで、致命的な誤解が生じてしまったので、
事情説明をしてコミュニケーションの修復を図っただけですよ。
どこにも私の主観・思想が語られておらず、ただ私に関する事実が述べられているのみです。
(もう一度お読みになってみることをお勧めします。)
それなのにその部分だけとりあげて哲学を語っているからスレ違いだとするのは
あまりに早計ではないでしょうか。
>>235 それだけの英語力があるかはやや不安です。
やはり、日本人だから日本語のほうが話しやすいものです。
>>238 つうかもっと完結に書く能力はないの?
どうせ「誤解のない詳しく書いてどうのこうの」ってくどくど書くんだろ?
その妙な書き方 前に見たような気がするが…
>>238 > うらむ相手が間違っています。
>>232 >>234がお前さんを「うらんでいる」という解釈こそ、この場で最も大きい「とんだ誤解」では。
どこから「うらむ」という発想が出てきたのか、まるで見えてこない。
自分がなんで注意されてるかさっぱり理解できない天然さんぽいから放置で。
なんという入れ食い
>>239 確かに簡潔に書くことは大切ですが、私が簡潔に書く能力がないとするのは論理の飛躍です。
それに、私の文章が簡潔でないというのも偏見ではないでしょうか。
文字数が特別多いわけでもないでしょう。
あと、簡潔に書けるのになぜ簡潔に書かなかったかというと、その必要を感じたからです。
つまり、あらぬ誤解をかけられて、それがために質問者としての目的の遂行に障害が発生したので、
必要なだけの対策を講じたまでです。
そうした些末なことはまさにスレ本題ではないので、
>>241の言うように放置をお勧めします。
それから、2chは私は数年前から定期的に利用しているので、私の文章をあなたが見た可能性は否定
できませんが、私の今回の文章を見ただけで、あなたが過去に見た特定の文章の書き手と同一視して
しまうのは早計ではないでしょうか。
そもそも、仮にあなたが過去に見たような気がするというその文章が私のものだったとしても、
だからどうしたというんですか?
発言の意図が見えてこないし、スレ違いもはなはだしいので自重お願いします。
>>240 うらむという表現は「敵対的な言い方をされる」という表現に置換することも可能です。
要するに、表現方法の問題です。
そもそも、仮に、私が
>>238で「とんだ誤解」といったときに最大な過ちが私の表現方法
にあったのだとしても、
>>232>>234が誤解をしていることには何ら変わりがありません。
>>241 具体的にどんな点で私が注意されるべきなのでしょうか。
もっとも、
>>241が私に向けた発言でないことは明白ですが。
にゃーにゃー
日本語として成立しなくなったら釣りも終わりだな。
しねばいいのに・・・
日本語の得意な朝鮮人が来てますねwww
895 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/07(月) 02:32:27
頭が悪いのに口だけは達者な馬鹿の典型だなw
会社で嫌われてんだろうなぁ・・・
>>243 > そうした些末なことはまさにスレ本題ではないので、
>>241の言うように放置をお勧めします。
オマエガナ
祭りと聞いて(ry
ごめんなさい。釣りでした。
続きまだぁ?
Perlでは珍しいタイプの狂人だな
この無駄な冗長さはコボラー
珍しく伸びてると思ったら
…珍しくもないか
それに、あと、つまり、それから、そもそも、
こんな接続詞が多用されている時点で
簡潔に書けてない事がよく分かるな。
みんな、楽しそう。
3行でおk
ス
レ
違い
263 :
デフォルトの名無しさん:2008/01/31(木) 02:25:46
なぜこのスレに、精神異常者チェイサーズが集結しているのか?
後に現れるのは、もちろんキティガイ
エンターキーを押さなくてもキーボードから
一字だけ入力を受け付けたいときはどうすればいいでしょうか?
266 :
デフォルトの名無しさん:2008/01/31(木) 20:08:05
できました。ありがとうございました。
$count = $x =~ tr/0-9/0-9/;
で数字の桁数を数えられるようですが、どういう仕組みなのか分かりません・・・
くだ質の類だと思いますが、よろしくお願いします。
tr演算子は置換した文字の数を返す
$xの数字を同じ数字に置換して,置換した回数を$countに入れてる.
$xが数字だけなら桁数と一致するわな.
目からウロコが落ちた。確かに数えられるねぇ。
でもなんか違う気がする。
面白いコードと実用的なコードには差があるからな。
できるこたできるけど中身が数字列の場合に限るし
それが保証されてるならlengthでもいい気はする。
>>273 my $num = '-123,456';
print $num =~ tr/0-9//, "\n"; # 6
print length $num; # 8
実戦での桁数は計算で出すよね
計算てw
n進数の桁数は計算だすよ
>>274 いや数字だけの列と保証されてる場合よ。
電話番号やカード番号みたいに、ハイフンがあったりなかったりのチェックで・・
・・・文字数だけじゃあんまり意味ないか
280 :
268:2008/02/01(金) 14:12:06
trは置換した文字列を返すんですね。
処理の順番も勘違いしてました。↓の順番なんですね
$count = ( $x =~ tr/0-9/0-9/ );
ありがとうございました。
「置換した文字列」ではない。
置換もしくは削除した文字数を返す。
while ($x =~ m/\d/gs) { $count++ }
283 :
268:2008/02/01(金) 14:41:11
重箱の隅だけど、
tr/a/a/
ってのは置換したことになるの?
やってみろ。
tr/hoge/hage/
の hoge にマッチした回数でいいんじゃね?
>>284 文法上は置換する(したことになる)が、実際の置換は行われない。
tr/X// や tr/X/X/ は対象に含まれるXを数える為の記述で、この場合には対象が
左辺値である必要もない。
perl -le "print q/123,456/ =~ tr/0-9a/0-9a/" # エラーにならない
perl -le "print q/124,456/ =~ tr/0-9a/0-9b/" # エラーになる
perl -le "print int(1234.56) =~ tr/0-9a//" # エラーにならない
288 :
デフォルトの名無しさん:2008/02/01(金) 21:17:49
ちょっと自分で試してみればすぐ答えが出るのに。
なんで試さないのかなぁ。
もしかして、ナイコン?
確かにわけわからん
レスを書くよりキーを叩く回数が少ないのに。
重箱の隅とか言いつつperlバイナリのソースコードのレベルの話を求めてるんじゃね?
% perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a//'
print 'aaaaa' =~ tr/a//;
-e syntax OK
% perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a/a/'
print 'aaaaa' =~ tr/a//;
-e syntax OK
5.00503だと 'aaaaa' =~ tr/a// は
Can't modify constant item in character translation
と怒られてdieした。5.6.1なら置換回数が返された。
293 :
デフォルトの名無しさん:2008/02/03(日) 23:24:30
質問です。
だいぶ前に書かれたライブラリ(*.pl)が現役で動いているとします。
色々な箇所で使われているため、(動いている限りは)できるだけこれを修正したくありません。
このライブラリの中に、以下のようなサブルーチンがあります。
sub Func
{
local *data = $_[0];
#ハッシュにいろいろ詰め込む
}
このサブルーチンは、以下のように呼び出すようにとサンプルコードが示されています。
local %hash;
&Func(*hash);
これを呼び出し側だけでもlocalを排除しようと、以下のように書き換えました。
実行してみた結果、ちゃんと動いているように見えます。
my %hash;
Func(\%hash);
この場合、
1.呼び出し元だけを書き換えることに意味はあるのか?
2.あるとしたら正しい書き方は?(cron、CGI、mod_perlで動かすことを想定)
よろしくお願いします。
バージョンによる
>>293 一般論としては、その修正で得られるのが自己満足だけなら、さわらないことをお勧めする。
>294
あ、バージョン書き忘れてました。
Perl 5.005
Apache/1.3.28 (Unix)
mod_perl/1.29
※下2つはCGIやmod_perl動作時のもの。
>295
自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
なるべくmyで統一したいと考えています。
それに、そのサブルーチンを呼ぶときだけlocalなのも変かなーと。
>>296 > 自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
> なるべくmyで統一したいと考えています。
そんな変質的行為に突入する前に、localの挙動をきちんと理解しろ。
localだと値を追いかけるのが面倒で……。
基本的にはそれで正しく動くはず。
ただ、1.2.の問いがあるから「書き換える必要はないんじゃないの?」って言われてるわけで。
ありがとうございます。
ライブラリの方を修正したいけど……中途半端に手を出したら悲惨なことになりそう……
古いライブラリをmod_perlで使おうとは思わないなぁ
古いライブラリをmod_perlで使うんじゃないんです
古いライブラリがmod_perlで動いてるんです……
自分なら、そんな動作よくわからない関数mod_perlで使わないが・・・
なんかラッパー関数作ってそっち使うようにしてけば
そのうち古い関数は淘汰されるんでは?
まあ、その少しずつやってます……。
他人の書いたperlの読みにくさは異常
書き換えるよりも書きなおしたほうが早いことさえある
読みながら書き直したりする。
以前、「どう見てもPrologです。本当にありがとうございました」な
プログラムをもらったことがある。
よくわからない物はよくわかるようになるまで触らない方がいいとは思うな。
localが気になるならコメント添えてここはこういう理由って記述しときゃ後で見たときにもわかるし。
せめてそのライブラリの流れ把握できるくらいになってからでないと。
localの98%くらいはmyにしてしまっても問題なくね?
いや、97%くらいだろ。
動いてんならいじるなよ
懸念してるのは想定外の2%だか3%のバグの発生だからな。
上でも言われてるがいじるメリットが自己満足だけなら俺もそのままのがいいとは思う。
312 :
デフォルトの名無しさん:2008/02/05(火) 20:11:35
Exporter が import を強制的にexportしなくなったのって、
仕様変更はいつから?
実装変更は、perl 5.9から?
人狼ってゲームのCGI設置したいんだけど(nifftyに)
できなくて質問CGIが動かないんだけど、以下エラー
Wed Feb 06 00:22:09 2008 Client Abort 2-- detected during CGI/SSI process
Wed Feb 06 00:22:10 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:11 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:12 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:14 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:15 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:16 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:18 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:19 2008 Warning: Connection closed and CGI process ID=400 ・・・・・・
以下の文法あやしい?
sub sub_lock {
# 1分以上古いロックは削除する
if (-e $lock_path) {
local($mtime) = (stat($lock_path))[9];
if ($mtime < time - 60) { &sub_unlock; }
}
local($retry) = 5;
# mkdir関数式ロック
while (!mkdir($lock_path, 0755)) {
if (--$retry <= 0) { &error('LOCK','LOCK is BUSY'); }
sleep(1);
}
$sys_lockflag=1;
}
ニフティで設置してる人いたからできるとは思うんだけども誰か助けて(;;)。。。
鼬害です
316 :
デフォルトの名無しさん:2008/02/06(水) 16:20:24
Perlって数ヶ月書かないだけでかなり忘れるんだけど、
おまいらPerlは毎日のように書いてるの?
俺のような記憶力弱いやつはPythonに替えるべき?
$str =~ tr/a-z/A-Z/g;
として小文字を大文字に変換しようとしてますが、
Bareword found where operator expected〜
とか言ってエラーになります。
何度ググってもこれであってるぽいんですが…。わけがわかりません助けて。
その前後が問題なんじゃないの?
>>317自己レス
gをなくしたら通りました。g使えないの?
ぐぐってでてきた複数の例で使われてるんだけど。
試したVerは5.8.2と5.8.8。
tr///はcdsだけみたいね
uc($str);
>>316 そんな毎日やるわけないけど
忘れたらリファレンスのページとか参考にすりゃいんじゃないの?
>>319 gはm s // だけのはず。
tr y は
>>320 似てるけど一応動作は別もんだからね。
>>316 Pythonでも、クラスのメソッドとか多くて覚えられないけどね。
ただ、Pythonに乗り換えたらPerlには戻れないと思う。
>>316 使うときはWebサイトか昔書いたソースを見ながらやってる
325 :
デフォルトの名無しさん:2008/02/06(水) 22:47:26
>>316 毎日とは言わないが、けっこう頻繁に使ってるな。
1回しか使わないような使い捨てスクリプトは perl で書いてる。
何度も使うのはCやjavaやVBやVBScriptや・・・・
perl って便利ですよ。
バッチファイルみたいに手軽にかけて、バッチファイルよりも遥に高度な処理ができるからね。
perl が嫌われてる理由を俺なりに考えてみた。
・漢字(ShiftJIS)に対応していない
・サーバアプリに向かない(CGI は負荷が重い)
・ソース丸見えだから業務アプリに向かない(納品できない)
でも使いようによっては超強力だよ。
perlって嫌われてるのか?
ところでperlで自分で書いたものって一月も前に書いたものは修正したくてならなくなるんだがwww
> 漢字(ShiftJIS)に対応していない
Encode.pmがあるじゃない
> サーバアプリに向かない(CGI は負荷が重い)
Hatena, Mixi, その他探せば色々あると思うんだけど
Perlが糞な理由はOOPやリファレンス回りの小汚い記法と
省略の美学(笑)によって解読不能なコードが書けるからだろう
きちんと書けば(『Perlベストプラクティス』みたいに)大分ましだが
Perlの特長を削いでる感じがするね
>>325 >ソース丸見えだから業務アプリに向かない
暗号化する仕組みがあるよ。
個人で使うならRubyかPythonのほうが幸せになれる?
>>329 個人で使うだけなら、迷わずPerl。
まぁ、好き好きだけどね。
理由はユーザーが多いから?年期の入った言語ゆえにソースが転がってるから??
後発の言語のほうが練られてそうなんですが。
初学者なんでこのままマスターしようか乗り換えようか迷ってるのですわ。
perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、
マスターした!って達成感を味わいたいなら別の言語にしたほうがいいよ。
perlを使う理由なんて「どこにでもある」「たいていのものはCPANにある」しかないよ。
マスターてのがどういう状態を指してるのか分からんが、
一通り文法覚えて書けるようになるだけなら、RubyもPythonも大して変わらんね
Perlぐらい憶えときゃええがな。他言語へも1,2週で移行できるわな
そんな人生の選択みたいに迷うほどのことちゃいまっせ
336 :
331:2008/02/07(木) 01:43:10
マスターって言葉使いましたが単にテキスト処理ならなんでもってレベルです。
レスありがとうございました。とりあえずPerl覚えときます。
>>327 横入りだけどJcode使ってた身としてはEncodeはかゆいとこに手が届かないなぁ。
あと、今はPHPとかエディタの機能とかで知れてるけど正規表現に腰が引けてる人もいたかもね。
使いこなせば強い味方だけどいきなりだとさっぱりわからんだろうし。
記述の簡略化はあるねー即興で組んだやつはファイルのクローズせずに終わらせたりかなり乱暴なことしてる。
良くも悪くも無茶な書きかたができるよね
コード書く
→後日、意味もなく省略化を施す
→さらに後日、自分の書いたものが理解できず解読作業
ひとつのコードで3回も楽しめるPerlサイコー\(^o^)/
日々のperlは書き捨て
342 :
デフォルトの名無しさん:2008/02/07(木) 12:13:33
激しくスレ違いかもしれませんが、質問です。
PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。
現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。
で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。
この違いはいったいなんなのでしょうか?
このゆとりはいったいなんなのでしょうか?
単なる誤爆じゃね? と思いたいが
345 :
デフォルトの名無しさん:2008/02/07(木) 15:02:53
use utf8;
use Encode;
use WWW::Mechanize;
my $start = "
http://***.com/***html";
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get( $start );
my $phrase = 'こんにちは';
$mech->follow_link( text_regex => qr/$phrase/);
.....
見たいなコードを書いて日本語のページ(shiftjis)をとりに行ってるんだけど、
getのときの文字コードの判別がうまくいかないので、
text_regexがうまく動かないんですが、いい方法ないですか?
346 :
デフォルトの名無しさん:2008/02/07(木) 17:29:33
>>345 裏2chにあります
●裏2chの入り方
1・”名前欄”に「ura2ch.czfusianasana.net」と入力します。
裏2chへ飛ぶためのコマンドです、間違えないように”「」”の内側の文字をコピーペーストして下さい。
2・メール欄に閲覧したい板の関連キーワードを入力してください。
例:ロリ、グロ、無修正など
3・”本文欄”にIDとパスワードを入力します。
ID/パスワード=「guest/guest」
4・書き込みが終了すると2chのTOPに戻るのでもう一度入場
5・背景が暗転していたら成功、裏2chに侵入出来ています。
ちなみに裏2chに既存の板は勿論存在します、それにサーバーは外国のサーバーなので日本のややこしい法律に抵触する事も無いです
週末や2ちゃんねるで話題の事件があるときはアクセス数が増えサーバーに負荷がかかる為、つながりについ場合があります
スポーツ選手のコラや無臭性画像も多数UPされている板も存在します
それに完全な匿名性を誇るので違法行為を繰り返しても逮捕される事はまずありません
すごい久々にそのコピペ見た。
:content_cbで変換するとか?
wktk♪
名前が長すぎるようです♪
コマンドプロンプトでperl -vと打ち込むところでperlと打ち込んだら
exitと打ち込んでもコマンドプロンプトが終了できなくなってしまいます・・・
__END__
kill -KILL `pidof perl`
^D
CTRL+Z
エンター
ctrl+s押して右往左往したことはある
>>355 あるある。リンクが切れたのかと思っちまう。
#ちなみに、Ctrl+Qでぬける。
357 :
345:2008/02/08(金) 11:45:09
自己解決しました。
裏2ちゃんねるにはいけませんでした、残念w
>>332 >perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、
したり顔でそんな放言出来るなんて、おまいはまだまだだな。
perlでも信頼性と保守性を担った、アプリケーションと呼べるレベルのものまで書けるわさ。
でっていう
さくっと書いてさくっと終わるようなものに 「も」 向いている言語だというのは間違いないんじゃないかな
361 :
デフォルトの名無しさん:2008/02/09(土) 01:32:18
いっしょけんめいPerlのコアなプログラミングを学習したところで、
就職にはなんの役にも立たない。
それどころか、履歴書や職務経歴書に「Perl」などと書こうものなら
面接のその場で不採用決定。
C言語とか覚えとけば、java やその他の言語にも生かせるが
Perlじゃ「つぶしが利かない」からねぇ。
まあ、趣味のプログラマな人間には全く関係ない話題ではあるなあ。
ウチの会社なら…履歴書の審査は通るぞ!
(他の履歴とか面接でダメになる可能性はるけど)
VBとか書いてあるよりはマシ。
まあ、会社の分野というか方向性によって違うんだろうけど。
「特技: 自転車に乗れます」と書くようなもんだからな。
参照渡しについて質問。
$a = 'aa';
$b = \$a;
print $$b;
のデリファレンスを
print $b;
この形で行いたいんですが、良い代入方法は無いでしょうか?
*b = *a;は配列とかも同じになるので無しで。
PHPの
$b = &$a;
みたなのを希望。
>>367 ありがとうございます。
読んで来ます。
比較で一致しないのはなぜ? 整数だと一致するし、直接比較しても一致する。 $b = $b+0.1;
がみそ?
$a = 5.5;
$b = 4.5;
for($i = 0; $i< 11 ; $i++)
{
if($a == $b)
{
printf("match :");
}
else
{
printf("unmatch :");
}
printf( "%2.2f %2.2f \n",$b,$a);
$b = $b+0.1;
}
結果
unmatch :5.40 5.50
unmatch :5.50 5.50 (- 一致しない
370 :
デフォルトの名無しさん:2008/02/09(土) 09:24:45
浮動小数点を==で比較してはいけない。プログラミングの常識。
差の絶対値がある閾値より小さいかどうかで調べるよね。
へーそうなんだ。整数しか使ったことがないから知らなかった。
369じゃないけど勉強になったわ。
cygwinのPerlだと
perl -e '$A=5.5;$B=5.500000000000001;print "match\n"if $A eq $B'
これがイコールになっちゃうみたいですね
浮動小数点表現では0.1が循環小数になる。
(だからお金の計算に浮動小数点使っちゃだめ)
>>374 eqの意味知っていて意図的に使ってるの?
>>371 FAQのようですね。確かに今回初めて浮動小数点の比較を使ったんだけど、知らなかった。
>>378 > FAQのようですね。
ちゃう。ちゃんとした教育を受けた人なら、質問を出す前に教わるくらいの事柄。
>>375 じゃあ、お金の計算には何使えばいいんだ?
利息計算とかでいやでも小数使うと思うんだが。
10進浮動小数点数
Perlの場合はBigDecimalだったっけ?
>>380 例えば消費税なら価格に5かけてから100で割る。
要するに細かい計算は整数で計算する。
それでは、コボラーさんどうぞ
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
固定小数点という便利な言い方があると思うんだが(笑)
固定小数点でも底が2なら0.1は表せないだろ。
388 :
デフォルトの名無しさん:2008/02/09(土) 20:29:27
ある既存のシステムからもらってきたデータの中に4バイトの単精度実数が入ってるんです。
それを受け取りたいんですが、画面表示すると丸め誤差ってヤツ?が出てしまうんです。
ためしにやってみたこと
$x=pack('f', 123456 ); $y=unpack('f', $x); print $y,"\n";
$x=pack('f', 0.05 ); $y=unpack('f', $x); print $y,"\n";
$x=pack('f', 0.0000001); $y=unpack('f', $x); print $y,"\n";
結果
123456
0.0500000007450581
1.0000000116861e-007
元の数字に戻すには、どうしたらいいですか?
>387
「固定少数点」でググれ
>388
精度を指定すれば?
391 :
386:2008/02/09(土) 20:36:48
>387
すまん、>384への補足のつもりだったんだ
392 :
デフォルトの名無しさん:2008/02/09(土) 20:52:05
>>388 $x=pack('f', 0.0000001 ); $y=unpack('f', $x); ($z = sprintf("%.7f\n", $y)) =~ s/\.?0*$//;print $z;
標準入力を待つため以下の様に書いたがうまくいきません。
何がまずいのでしょうか。ActivePerl5.8です。
use IO::Select;
$sel = IO::Select->new;
$sel->add(\*STDIN);
while(1){
print "can_read\n";
@a = $sel->can_read;
foreach $fh (@a){
if($fh == STDIN){
print "STDIN\n";
}
exit;
}
}
>394
perlport より
>select
>Only implemented on sockets. (Win32, VMS)
396 :
394:2008/02/10(日) 18:23:33
>395
そう言う事かー。納得しました。ありがとうございました。
397 :
デフォルトの名無しさん:2008/02/11(月) 02:25:54
$input_str =~ s/$key/$hash{$key}/gee;
できるかは知らん
>>397 クロスサイトスクリプティングって知ってるか?
素人のCGI作成は法律で禁止して欲しい。
>>397 答えそのものは書かないけど、以下のことが必要。
'\[google:\w+\]'の部分は'\[google:(\w+)\]'でしょうね。そうしないと
$1で受け取れないから。
置換をするなら、
$input_str =~ s/$key/conv($1, $hash{$key})/eg;
などとしておいて、
sub conv {
my ($word, $str) = @_;
$str =~ s/\$1/$word/g;
$str;
}
などとでもしておくとか。
で、
URLのクエリー部分に仕込む文字列はURIエスケープが必要。
そんで、マルチバイトの場合、どの文字コードにしてからエスケープするかも
考える必要あり。
さらに、<a>と</a>の間の文字列に使用するときはサニタイズ処理が必要(XSS対策)。
>>398 の方法だと、perlコードをそのまま解釈してしまうので、別の危険あり。
「与えられた文字列」は誰が与えるのかがとても大きな問題です。
URLにリンクを張るのは、大崎氏のPerlメモが使えると思います。
>399
もちろん知ってます。
置換条件と置換パターンを配列などに保持しておく(または外部から読み込む)という考え方自体が
セキュアではないということでしょうか?
>400
( )で括って無かったのは書き込み時のミスです、すみません。
手元のソースでは書かれてたんですが、適当な条件に直すときに忘れてしまったようです。
ありがとうございます。
自分用のツールをさくっと作るつもりだったけど、そこまでやろうとすると手間かなあ。
誰かモジュール作ってるかもしれないけど。
質問です。
'おまんこ'も'おちんこ'もマッチしないのですが、どこか間違いあるのでしょうか?
use strict;
use warnings;
use utf8;
binmode STDOUT, ':utf8';
while (my $str = <STDIN>) {
chomp($str);
last if ($str eq 'end');
if ($str =~ /お.んこ/) {
print "$& --- マッチしたお\n";
} else {
print "マッチしないお\n";
}
}
binmode STDIN, ':utf8';
追加したらマッチしますた。
質問です。
use Encode;
binmode STDOUT, ':iso-8859-1';
open READ , '<:encoding(utf8)', "$ARGV[0]" ;
while (my $data = <READ>){
print "$data";
}
close READ;
exit;
でutf8でencodeされたファイルをiso-8859-1に変換しようとしたら、
標準出力ではうまくいって、リダイレクトすると文字化けしました。
おわかりになる方、いらっしゃるでしょうか。
lv でみれないだけで、less したらみれました…すいません。
>>407 lvのほうがlessより優秀ってイメージなんだけど、lvが文字コードを誤判定しちゃったのかな。
use CGI;
my $delimiter = "\t";
my $q = new CGI;
my $save = $q->param('name') . $delimiter . $q->param('mail');
my ($name, $mail) = split /$delimiter/, $save;
入力はHTMLフォームからを想定しています。
こういった場合に適切なデリミタは何でしょうか。
たまに<>を見かけますが<>を><に変換してる場合じゃないと有効で無いですし
\tは入力が可能、\0は良い方法だと思いますがCGI.pmと衝突します。
\a等が良いのでしょうか。
× たまに<>を見かけますが<>を><に変換してる場合じゃないと有効で無いですし
○ たまに<>を見かけますが<>を<>に変換してる場合じゃないと有効で無いですし
ミスりました汗
板違いっぽいがスペースじゃだめ?
$save の前に入力チェックしてタブ文字を消せばいいだろ
my $save = join("&&", map { my $i = $q->param($_); $i =~ s/&/&/g; $i } ("name","mail"));
my($name,$mail) =~ map { s/&/&/g; $_ }(split("&&",$save));
>>409 <SOME_UNPREDICTABLE_STRING_XXX> でおk
投資家板で名高いプログラマの書いたコードですが
初心者が多く、下記コードについて評価できません
プロの目から見た下記コードの評価を教えて下さいませ
http://live27.2ch.net/test/read.cgi/market/1202806626/454 $vict++;
$vict100++;
print $_ ."$riekiプラス!持ち越し成功!\n";
}
if($end < $start2){
$loss=$start2-$end;
$loss=~s/\-//;
$totall =$loss + $totall;
$totall100 =$loss + $totall100;
$lost++;
$lost100++;
print $_ ."$loss マイナス!持ち越し失敗!\n";
}
}
つづきです
if(($cost < 1000)&&($cost > 300 )){
if($end > $start2){
$rieki=$end -$start2;
$rieki=~s/\-//;
$totalr =$rieki+$totalr;
$totalr1000 =$rieki+$totalr1000;
$vict++;
$vict1000++;
print $_ . "$riekiプラス!持ち越し成功!\n";
}
if($end < $start2){
$loss=$end-$start2;
$loss=~s/\-//;
$totall =$loss + $totall;
$totall1000 =$loss + $totall1000;
$lost++;
$lost1000++;
print $_ . "$lossマイナス!持ち越し失敗!\n";
}
>>415 前の部分が欠けてて途中からになってるけど…?
書きかたはまるっきり初心者
処理内容としては
1.コストで場合分け(ここで見えてるのは300から1000まで)
2.スタートとエンドの差をとって,スタートがエンドより低ければ利益,逆なら損害として出力
3.利益または損害をトータルに加算
4.利益の出た回数と損害の出た回数をカウント.コストの範囲ごとにもカウント
なんつうか小学生でも計算できる内容だ
計算さえ出来ればいいんでしょ?
合ってりゃいいと思うよ
>>415 軽くスレ読んだが名高いプログラマじゃなくて単に周りに避けられてる面倒くさい人じゃん。
コードは上で言われてるように初心者でも書ける程度のもん。
プログラム書かない人にけん制になると思ったのかもしれんが
こんなの書いて自慢する人より電卓持ってる事務員のがずっとマシ。
ちゃんと動いて計算が合ってるならいいんじゃないの?
それ以外に評価しようが無い。
「名高いプログラマ」ってとこは確かにどうかと思うコードではあるw
あっちのことはよく知らないけど,変な演算する能力よりもデータを見極める目のほうが大事なんじゃないの?
主婦が、余った材料で栄養バランスの取れた料理を作るようなイメージ。
プロの料理人と比較しちゃいけない。
典型的なうんコードだな
>>421 あ、ごめん。機能満たすだけなら充分。
でも向こうのでの使い方が目的あって出してるコードじゃなく
素人にコード見せて牽制してるだけだからこんなの自慢にならんなぁって。
データを集積して処理するならともかく、この程度のことなら電卓+ノートのほうがいいと思うがな
サイタマン は やっぱり うんこだった!
名高いプログラマーというより彼は社長だそうです。
年収3000万だったそうです。
ですからプログラムの内容というよりは
アイデアで儲けている方なのかもしれませんね。
真実が定かでは無いのですが彼がIT企業の社長という点はどう思われますか?
>>424 だが余った食材をそのまま食べたほうが味も見た目も栄養も手間も優れていたというパターン
ただの自己満足にしかなってないという…
こっちに来られると困るからノーコメント。
内容云々じゃなくて、これくらいすばらしいコードを書けるスキルがあれば年収2000万くらいは最低限ある、
という内容のことを言っていたのですが、株板では判断できる人が少なかったので参考になりました。
__ ♪
ヨホホ♪ \ \ ♪
\/ `' ==‐‐-- 、 ♪
ξミミミミミ ./\ .ヽ,
. |´_`| / .\ ,l
/.__) ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄|
〜l└‐L、 _,==.,―――=,==r′
l~~`ゝつ.l l |||/ | l´ l |
. ´|| ̄||´ |.|≠ || ||
>>429 とりあえず
2chに入りびたってコテハンつけてる
そんなIT社長はイヤだ
__,,γ⌒ヽ _
,,-''", ―‐―イ―ュ---、,,,,,,,,,,_ 三\
/ ∠ ム_ゝ三i二二(山山アヲ -= 二)
γ √ イ,, -" .三/
.ん、_(γ7''"  ̄
r_,ノ''こ!、,,┴.
.| ‘''く′ ,/ │
.r'ヘ,、 `'イ゙>'"
.厂|,`'-,, .|'ヽ、
.〜へ-―‐^''ー"
「○○なら年収○○万くらいは最低限ある」 なんて言い方する時点で中二病
ここは2chだぞ
個人のスレがたってるような奴を信じるなよw
>>437 投資板はcisっていうイレギュラーの塊のような人が住んでるから
うそつきが住みやすいんですよ
コテで自慢する人は注目されたいだけ。
>>435 いりません。お引き取りください。
2レス目まで読んだ
Results 1 - 10 of about 1,040 Japanese pages for 金拝主義. (0.21 seconds)
Results 1 - 10 of about 5,450 Japanese pages for ボラリティ. (0.14 seconds)
Results 1 - 10 of about 3,130,000 Japanese pages for シュミレーション. (0.10 seconds)
Results 1 - 7 of 7 Japanese pages for イートレイドワラッパー. (0.35 seconds)
プロフィールをていぞう
愚かの骨頂
個性的な語彙を持ってることはわかった
442 :
デフォルトの名無しさん:2008/02/13(水) 12:51:45
サイタマン社長はゴールドカードもupしてるし
信じたいんですがやっぱり嘘なのでしょうか。
客観的に見てあのくらいのプログラムが書ければ年収二千万はいけるのでしょうか
>>442 すでに必要な情報は提示されてる。あとは自分で考えれ。
ここは2chだぞ。
おー。変数名に数字つかうってスゴいセンスだな。
でどこの幼稚園の子供よ?
これだけ持ち上げられるってことはなにか持った奴なんじゃない?
どうやら面白ワード生成機として有名みたいだな。
サイタマン先生の今までupした物は
200万円くらいのお金と60万円の証券会社の口座と
ゴールドカード4枚ですね。
プログラムのスキルでよく株のツールなどを作ろうかなどと言ったりします
>>447 なんだかんだで君も彼にぞっこんっぽいなw
>>446 2ch語を適当に組み合わせるしか脳のない「普通の厨」なら、
似たようなクオリティの人工無能も書けるかもしれないけど、
天然素材は模しようがないなw
>>449 実は本人はスーパーハカーで,2chに書き込んでるのはサイタマンに作られた人工知能なんじゃないか…
そしてあのコードも学習して自動生成されたんじゃないかと妄想してみたwww
>>447 ゴールドポイントカードならぼくも持ってるよ。
ま、スレ違いだから去れ
453 :
デフォルトの名無しさん:2008/02/13(水) 15:54:58
aaa1 aaa2 aaa3 aaa4 というファイルがあったときに
通番どおりに結合して1つの出力にする上手い方法ありませんでしょうか?
cat 呼び出す
455 :
453:2008/02/13(水) 18:25:02
>>454 ありがとうございます。
catは盲点でした。無事解決しました。
456 :
デフォルトの名無しさん:2008/02/13(水) 18:31:44
配列のなかに配列を複数持っている場合
それらをうまく結合する手段ってないでしょうか?
具体的には以下のような感じです
@array[1] = {aaa, bbb}
@array[2] = {ccc, ddd}
@array[3] = {eee, fff}
このとき、一つの変数にまとめて
{aaa, bbb, ccc, ddd, eee, fff}
となるようにしたいです。
申し訳ないのですが、知恵を貸してください。
544 :デフォルトの名無しさん:2007/05/12(土) 02:54:05
深さのある配列を左から順番に呼んでフラットな配列を作りたいんですが、
よい方法ご存知の方いませんか
@a = ([1,2,3], [4,5,6], [[7,8],[9,0]]);
@b = flatten(@a); # 1,2,3,4,5,6,7,8,9,0
546 :デフォルトの名無しさん:2007/05/12(土) 03:16:52
>>544 sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ }
こんなんどうよ。
>>457 456です、回答ありがとうございます。
しかしながら、私が挙げた例の場合にはどのように用いればよいか分からず困っています。
ヒントだけでもいただけないでしょうか?
{}はハッシュだろ
>>459 理解できました、ありがとうございます!
Pgを使って(DBIじゃなく)複数スレッドから同時にDBアクセスを使用と思います。
DBへの接続は各スレッドで行います。
Perl自体はスレッドに対応していても、関連モジュールとかの対応状況がわかりません。
バージョンは以下の通りです。
Perl 5.8.8
libpg 2.1.1
PostgreSQL 8.1
ディストリビューションは、Debian etchです。
スレッドの方が子供の面倒が見やすそうなので、できればスレッドにしたいのです。
462 :
デフォルトの名無しさん:2008/02/14(木) 01:19:43
で、自分では試したくないので、だれかヒマなヤツ、オレのかわりに試してくれんか。
オレは家でゴロゴロしてアニメ観るのに忙しいから。
・・・とか?
いえ、アニメじゃないです。 アニメの実写劇場版です。
>>462 せっかくぼけてくれたところをマジレスすると、試して問題なかったからと言って、スレッドに対応しているとは限らないから困ってるんです。
たまたま動いているだけってことがあるし。
465 :
デフォルトの名無しさん:2008/02/15(金) 09:03:33
perl5.10が普及するのっていつごろ?
>>464 その当たりの情報は、ソースやリリースノートを追うしかないと思う。
やたら古くてあまり参考にならないけど
tp://homepage3.nifty.com/hippo2000/perltips/DBI/FAQ.htm#5_1_Can_I_do_multi_threading_wit
ActivePerlの5.10の最新版(ほかいくつかのバージョン)で、
ppm search (モジュール名)
でモジュールをネットから探してくれないのですが、
何か指定が必要でしょうか。
>>467 5.8 と5.10ではバイナリ互換性がないので、単に5.10向けにビルドしたのがないと思われる。
469 :
デフォルトの名無しさん:2008/02/17(日) 01:17:31
winで、perlからmysqlを使っているのですが、
insert into a(a) value("あ");
コマンドラインで打つとうまくいくのですが、perlのDBIではうまくいきません。助けてください。
>>469 向こうの(mysql)スレでも言われているように、mysqldのdefault-charsetは確認したか?
471 :
デフォルトの名無しさん:2008/02/17(日) 09:58:05
はい、sjisになっていて、win なのでPerlで書いているソースもそうじゃないかと。
>>471 ほんじゃ、unpack()つかって、バイナリの並びを表示して確認してみるとか?
>471
最近の Perl は内部 UTF-8 だべ。
>>471 >>470で聞いたのは、mysqldの’connect’と’client’のcharsetのこと。
mysqldのversionを明記してないけど、多分4.1か5.0だと仮定して、
perl-DBD-mysqlで接続したときの、default-charsetがちゃんと’sjis’なり’cp932’になってない。
(mysqldとDBD-mysqlを自前でコンパイルしてない限り)
つうことでそこを確認、変更しましょう。
ちなみに
>>469で書いてるみたいに、コマンドラインのmysql.exeからLoginして確認した
’charset’関係は、あくまでもコマンドラインのmysqlからの接続時のみに効いてる状態なんでそれとは別。
475 :
デフォルトの名無しさん:2008/02/17(日) 13:47:20
>>469 insert 以前にさ、select はうまくいくの?
初心者なら、簡単な事からはじめてみよう。
use utf8;
use DBI;
my $db = DBI->connect("DBI:mysql:以下省略・・・
$db->do('SET NAMES UTF8');
$id = 1;
my $sql = "SELECT name,address FROM members WHERE id=$id;";
my $sth = $db->prepare($sql);
$sth->execute or die DBI::errstr;
$sth->bind_columns(undef, \(my($M_name,$M_address))) or die DBI::errstr;
my $rc = $sth->fetch();
utf8::decode($M_name);
utf8::decode($M_address);
insert はこの逆をすればいいだけ。
476 :
デフォルトの名無しさん:2008/02/17(日) 16:29:46
設問1
f-e-d-c-b-a-0-a-b-c-d-e-f
477 :
デフォルトの名無しさん:2008/02/17(日) 16:31:00
設問2
9-8-7-6-5-4-3-2-1-X-1-2-3-4-5-6-7-8-9
478 :
デフォルトの名無しさん:2008/02/17(日) 17:13:02
以下の問題を定義しなさい。
1{"f" = "-f == f" && "+f == f"}
2{"9" = "-9 == 9" && "+9 == 9"}
3{構成文省略}
"9" は "f" に等しく、また "-9" は "-f" に等しい
"0" は "X" に等しいので "0" == "X" = "n" とする
先ず此の構成を "x,y,z && n" を成型にしなさい
また "n" は "y" で在り "9…0…9" まで存在する
しかし "n = y" の配列は"次の"配列 "9…0…9" を使用する事!
残された "9…0…9" は "1/3" の後の "1/4" で使うが?
"n" == "0 = X" && "x,y,z" = "x,y,z" == "n/4" に為りますが構成は入り組んで居りますね?
日本語が苦手なら英語でおk
どちらのお国のガイジンさんですか
宿題は自分でやるか先生に聞きなさい。ためにならん。
いくらなんでも丸投げすぎワロタw
解読できません><
誰か和訳たのむ
487 :
デフォルトの名無しさん:2008/02/17(日) 22:24:11
おちんちんの傘のまわりに小さいギザギザがあるんですが
医者に見せたほうがいいですか?
>>487 このスレ的には大きなツブツブのほうが好まれますね
死ね
>>490 即答ありがとうございます 助かりました
492 :
デフォルトの名無しさん:2008/02/18(月) 23:48:34
中身見た?
$moji = 'a<>b<>c<>';
ミスです。
$moji = 'a<>b<>c<>';があって
2番目だけを切り取るいい方法ってありますか?
配列ならspliceみたいな
配列にしてspliceすればいい。
$moji =~ s/^([^<>]+<>)([^<>]+<>)/$1/;
s/^((?:.*?<>){1})(?:.*?)(?:<>|$)/$1/;
s/qあwせdrftgyふじこlp. くぁwせdrftgyふじこlp;/;
>>495 「切り取る」とは
除去なのか
$moji =~ s/(?<=<>).*?(?=<>)//; # a<><>c<>
$moji =~ s/(?<=<>).*?<>//; # a<>c<>
取得なのか
$value = (split /<>/, $moji, 3)[1]; # $value = 'b';
Windows Excel から Perl スクリプトを実行し、その結果を受け取ることはできますか?
目的は Perlスクリプトに GUIラッパーをかぶせることです。
処理結果を Excel に渡してグラフ表示することなども考えてますので、
その意味でも Excel から一貫して操作できれば、と考えています。
具体的には Web サーバからダウンロードした Apache の access log を
見やすく解析したいと思っています。
業者さんの設置してくれた アクセスログ解析CGI では得たい情報が得られないので、自分でなんとかしようと思いました。
実行するのは会社のパソコン上です。Perl の実行環境は用意しようと思っていますが、
それ以外のローカルサーバでの CGI とか PHP とかは今のところ考えていません。
環境は WindowsXP、Excel 2003 です。
どうぞよろしくお願いします。
Excelスレ池
Perlで解析結果をファイルに書き出して
Excelのマクロでグラフにすればいいんじゃないかな
え、Perlいらなくね?
レスありがとうございます。
>>502 やはりスレ違いでしたか…Excel VBAスレのテンプレ読んでこちらに来てしまったのですが、
書き込んでからやっぱりこっちのスレは違うかもと思いました。申し訳ありませんでした。
>>503 Perlを実行するのを、DOS窓からコマンドを打ち込むのではなく、例えば
Excel の マクロの中から実行できないかと思いまして…。
>>504 Excel の VBAでスクリプトを作りかけたんですけど、簡単な置換をさせただけでも
結果が帰ってくるまでに5分ぐらいかかってしまいました。それでPerlに変えたんです。
もっとも実行させたのがPPCのMac上だったので、Windowsだったらもっと早いとは思うのですが…。
ではExcelのスレに移動することにします。
レスいただきどうもありがとうございました。
携帯のアクセス制限はどうすれば良いの?
IPアドレスだと毎回変わるんだが
507 :
デフォルトの名無しさん:2008/02/22(金) 14:50:54
perlで、「iostat -x」の出力結果の
----------------------------------------------------
extended device statistics
device r/s w/s kr/s kw/s wait svc_t %b
twed0 6.3 35.9 81.1 565.8 0 9.8 7
----------------------------------------------------
の中の、「81.1」と「565.8」だけ標準出力したいのですが、
試行錯誤したのですが、うまくいきません。
最後に試したのが、以下のスクリプトですが、
何も表示されずにちょっとお手上げです。
どなたかご指摘頂けないでしょうか?
どうぞお願いします。
----------------------------------------------
#!/usr/bin/perl
open(FILE, "iostat -x");
while (<FILE>) {
if (/^twed0?\s+?[0-9\.]+?\s+?[0-9\.]+?\s+?([0-9\.]+)?\s+?([0-9\.]+)?\s+?[0-9]+?\s+?[0-9\.]+?\s+?[0-
9]+$/) {
print "$1\n";
print "$2\n\n\n";
}
}
close(FILE);
----------------------------------------------
open(FILE, "iostat -x |")
509 :
デフォルトの名無しさん:2008/02/22(金) 15:01:39
>>508 アドバイスありがとうございます。
>>508さんの方法でもやってみたのですが、やはり何も表示されませんでした。
何がまずいんだろう・・・
……
chomp汁!
kwsk見てみたが正規表現が間違ってるっぽいな
もうちょっと見てみるわ
514 :
507:2008/02/22(金) 18:56:36
>>511>>512>>513 お手数お掛けしてすみません。
私は、いつもphpを使っているので、phpのperl互換の正規表現で色々と試行して、
phpでは正規表現の部分で正常にできました。
どこが動かないのかデバックコードを書いてみました。
----------------------------
#!/usr/bin/perl
open(FILE, "iostat -x |");
print"-";
while (<FILE>) {
if ("/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i") {
print "$2\n";
print "$4\n\n\n";
}
print "*";
}
close(FILE);
-------------------------------------
上のスクリプトで実行すると、出力結果が
「-
*
*」(改行つめました)が出力されます。
シェルから、「iostat -x」とたたくと、前述ようにきちんと出力します。
たぶん、if文の使い方が悪いと思うのですが、
どのようにやるのが正しいのでしょうか?多分、初歩的なことかも?
引き続き、宜しくお願いします。お手数お掛けします。
515 :
507:2008/02/22(金) 18:58:41
あ!、改行が複数飛び飛びに入っている実行結果から$2と$4は空文字になっているのだと思います。
でも、そこからどう解決できるのかが分かりません。う〜ん。
>>514 if(〜)は何でdouble quoteしてるの?
517 :
507:2008/02/22(金) 19:21:21
>>516 これは初めてつけていなかったのですが、試行錯誤していて試しにつけてみたら、
if文の中を実行ができるようになりました。(複数改行が出力されます)
本来はつけないのが正しい記法なのでしょうか?
そうだとしますと、ますます混乱してきました。
>>517 "で括った文字列は空文字列でなければ必ず真と判断される。だから意図した条件を満たさない行も出力されてるでしょ
付けちゃだめだよ
今iostatが使えない環境なので
>>507のデータをファイルに入れているんだが、これはきっと期待通りの動作だろう
#!/usr/bin/perl
open(FILE, "iostatdata.dat");
print"-\n";
while (<FILE>) {
chomp;
if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) {
print "\$2 = $2\n";
print "\$4 = $4\n";
}
print "*\n";
}
close(FILE);
519 :
507:2008/02/22(金) 19:44:14
>>518 わざわざコードまで書いて下さって、本当に親切にどうもありがとうございました。
早速試してみたのですが、う〜ん...結果はうまくいきませんでした。
●iostatの実行結果
------------------------------------------------------------------------------
www# iostat -x
extended device statistics
device r/s w/s kr/s kw/s wait svc_t %b
twed0 5.1 37.6 78.3 598.9 0 10.5 7
------------------------------------------------------------------------------
520 :
507:2008/02/22(金) 19:44:38
●perlでの実行結果
----------------------------------------------------------------------------
#!/usr/bin/perl
open(FILE, "iostat -x |");
print"-";
while (<FILE>) {
# if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) {
# print $1 . "\n";
# print $4 . "\n\n\n";
# }
chomp;
if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) {
print "\$2 = $2\n";
print "\$4 = $4\n";
print "*";
}
print "*\n";
}
close(FILE);
------------------------------------------------------------------------------
# /home/test/test.pl
-*
*
*
------------------------------------------------------------------------------
521 :
507:2008/02/22(金) 19:45:41
●【参考】phpの参考結果
----------------------------------------------------------------------------
$word = "twed0 5.1 37.6 78.3 598.9 0 10.5 7";
$word = preg_replace("/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/", "$2--$4", $word);
echo "->". $word . "<-";
----------------------------------------------------------------------------
->37.6--598.9<-
>>506 各社の携帯電話が使うIPアドレスの範囲は公式ページに載っているので、それで制限することはできる。
特定の携帯電話をはじくのは無理かな。同じ機種使ってれば、区別のしようがないし。端末IDを送信してれば区別できるけど。
523 :
デフォルトの名無しさん:2008/02/22(金) 20:35:23
じゃオレも。
●
>>521 のphpをそのままperlの文法に書き換えただけでの結果
------------------------------------------
$word = "twed0 5.1 37.6 78.3 598.9 0 10.5 7";
$word =~ s/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/$2--$4/;
print "->". $word . "<-";
------------------------------------------
->37.6--598.9<-
ほらちゃんと
>>521と同じ結果が出たぞ。
何が違うのか、よ〜く見てみろ。
「問題の切り分け」 って習わなかったのか?
phpだろうがperlだろうがjavaだろうが、
どんな言語でもデバッグの手法は同じだよ。
もういちど基本に帰れ。
つ s
>506
やっぱ端末情報を拾うのが一番じゃないか?
>>507,523
x フラグつけてくれ。読みにくくてかなわんw
そもそも正規表現で拾う必然性すらない。
#!/usr/bin/perl -w
use strict;
# open IOSTAT, 'iostat -x |' or die $!;
*IOSTAT = *DATA;
scalar <IOSTAT>; # extended device statistics
my @col = split /\s+/, <IOSTAT>;
my %v;
$v{'device'} eq 'twed0'
and print "$v{'kr/s'}\n$v{'kw/s'}\n\n\n"
while @v{@col} = split /\s+/, <IOSTAT>;
close IOSTAT or die $!;
__DATA__
extended device statistics
device r/s w/s kr/s kw/s wait svc_t %b
twed0 6.3 35.9 81.1 565.8 0 9.8 7
twed1 5.1 37.6 78.3 598.9 0 10.5 7
528 :
デフォルトの名無しさん:2008/02/23(土) 15:19:23
それを言っちゃオシマイよ
// データを1行読み出す。
function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
変数名の最後に数字使うのは初心者だろ?
もしコード拡張で数値計算が入ったら紛らわしい
だって、変数名の最初に数字がつかえないんだもん。
誤爆か?
考え込んでしまった
evalって、エラーがなければ$@が空文字列であることが保証されるとのことですが、
evalのリターンはエラーがあった場合、undefであることが保証されますか?
definedな戻り値と$@が両立するケースはありますか?
534 :
530:2008/02/24(日) 11:01:47
>>531 ごめん。ぼけてみたんだけど、はずした。
535 :
デフォルトの名無しさん:2008/02/24(日) 11:42:40
>>533 どうもです!構文エラーと実行エラー以外に$@が設定されるエラーはないと
考えていいんですよね??素人丸出しな質問ですが。
>>534 いやまあ、あなたのことじゃないんで気にしないで
コンパイル時にパッケージ名とサブルーチン名を区別できない可能性があるから、
サブルーチンの名前には大文字を使わないと聞いたことがあるのですが本当でしょうか?
また実際に区別できないことがあるのは、どういった使い方をした場合でしょうか?
あ
>>539 回答ありがとうございます。
一般的にパッケージ名に大文字を使うため、サブルーチンの名前にも大文字を使うと、
パッケージ名とサブルーチン名が重複する可能性があり、
重複するとコンパイラが区別ができないことがあるのかと、
疑問に思ってるのですが、これについてはどうでしょうか?
「名前空間」の勉強してこいよ
?
重複して困るのはサブルーチン名でなくラベルやファイルハンドル。
#!/usr/bin/perl -w
use strict;
package Foo; sub Foo { join '', @_ }
package Bar; sub Bar { print 'Bar!' }
package main;
# これはOK
# print Foo Foo Foo => "\n", Foo->Foo("Foo!\n"); # FooFoo\nFooFoo!\n
# Bar Bar; __END__ Bar!
# パッケージ名と同名のファイルハンドル
# open Foo, '>./Foo.txt' or die $!;
# Foo->Foo('Foo!'); # ここで混乱して実行時エラー
# close Foo; __END__
# goto EXPR を goto LABEL で解釈してコンパイルエラー
# for (1..5) { $_ > 2 ? goto Foo Foo 'Foo' : print "$_, " }
# FooFoo: print 'foo!'; __END__
# 優先順位の明確化で解決
# for (1..5) { $_ > 3 ? goto(Foo Foo 'Foo') : print "$_, " }
# FooFoo: print 'foo!'; __END__ 1, 2, 3, foo!
546 :
デフォルトの名無しさん:2008/02/26(火) 21:59:27
素人が趣味で書いたホームページを鵜呑みにされても・・・
何かあるのかと思って確認のために聞いただけじゃないか
素人かどうかなんてわからないだろ
わからないなら素人として扱うのが安全だろ
じゃあここでレスしてるのも素人ばっかりだなw
お前はその前提で喋ってればいいんじゃね?
馬鹿だなーって思われるだけだけど。
552 :
デフォルトの名無しさん:2008/02/27(水) 16:23:09
笑うところだろw
まぁ鵜呑みにするな、っていうのは真理だな
素人です。教えてください。
何もわかりません。動きません。
絶対プログラムは正しいので、Perlのバグだと思うのです。
・・・・。
どっかのコピペか?
556 :
デフォルトの名無しさん:2008/02/28(木) 09:41:09
質問です。
func_hoge() というサブルーチンがあります。
このサブルーチンは、内部でエラーが起こった場合のみ、エラー番号やエラーメッセージを返してきます。
何も問題なければ 0 やら空文字列が返ってくるとします。
func_hoge()を呼び出すときは、
my $err = func_hoge();
if ($err) { die "Error func_hoge [$err]"; }
というように返り値を保持しておき、
エラーがあれば、その時のエラー番号(可能であればサブルーチン名などの目印も)を表示したい。
これはこれで全く問題ないのですが、func_hoge()の呼び出し箇所が増えると
エラー格納用の一時的な変数が増えてしまいますし、何より面倒です。
何か楽できる方法ありませんか?
func_hoge de die
func_hoge()の中でuse Carpしてcroakすればいいんじゃね?
die させないときはeval{}で囲えばいいし。
サブルーチンの中を弄らないと無理かー。
呼び出し側だけで何とか小手先の変更で出来ないかなとか考えてた。ありがとう。
ん?
push @err, func_hoge();
みたいなもんでいいのかな。
新しいサブルーチン作ればいいじゃん。
if (my $err=func_hoge()) { die "Error func_hoge [$err]"; }
>560
状況にもよるけど、サブルーチンを呼ぶたびにエラー判定しなきゃならないような類だと
結局手間は変わんないかも。
>561
最終的には多分そうなると思う。
>562
やっぱそれが一番スマートなのかなあ。
564 :
デフォルトの名無しさん:2008/02/29(金) 00:37:04
Perlってパースした後の構文木をプログラムで書き換えることはできないの?
dieで死ぬだけなら再利用しちゃえばいいんじゃないの?w
567 :
デフォルトの名無しさん:2008/02/29(金) 10:51:40
Perl の localtime 関数はエポックからの秒数をローカル時刻の年月日に
分解してくれますね。これとは逆に、ローカル時刻の年月日を
エポックからの秒数に変換するにはどうしたらよろしいでしょうか?
timelocal
一度くらい自分で作ってみるのも悪くないけど(簡単だから)、
出来上がったらそれ以降は
>>568を使っておけばいいな。
570 :
デフォルトの名無しさん:2008/02/29(金) 14:22:22
Perl で split 関数が返す配列を、一度配列に入れずに、すぐに配列参照として
受け取ることはできますか?
$ar = split(/,/, $str);
$ar_ref = \@ar;
じゃなくて
$ar_ref = split(/,/, $str);
のようにしたい。
↓こんなのじゃうまくいかなかった。
$ar_ref = \split(/,/, $str);
anonymous array reference constructor
572 :
デフォルトの名無しさん:2008/02/29(金) 14:43:44
>>571 つまり、こういうことですか?
$ar_ref = [ split(/,/, $str) ];
でも、これだと、配列の要素をコピーすることになりそうで (なりますよね?)
無駄ではありませんか?
>>572 実際の動作がどうなるのかはソースを読む。
読みたくないなら、明らかにコピーしそうなperlコードとBenchmarkで比較。
575 :
デフォルトの名無しさん:2008/02/29(金) 16:29:22
証拠がソースだったら読むのか?
他人に頼りすぎだ。
パフォーマンスが気になるなら、ちょっと確かめてみればいい。
こんなコード断片が書けないのなら、パフォーマンスなど気にするだけ無駄。
use Benchmark qw(timethese);
my $source = join(',', ('abcdefg')x80000);
my $result_ref;
timethese(100, {
temp => sub { my @temp_array = split(/,/, $source); $result_ref = \@temp_array; },
bracket => sub { $result_ref = [ split(/,/, $source) ]; },
none => sub { split(/,/, $source); },
});
Benchmark: timing 100 iterations of bracket, copy, none, temp...
bracket: 9 wallclock secs ( 8.94 usr + 0.00 sys = 8.94 CPU) @ 11.19/s (n=100)
none: 6 wallclock secs ( 6.76 usr + 0.00 sys = 6.76 CPU) @ 14.80/s (n=100)
temp: 15 wallclock secs (14.27 usr + 0.00 sys = 14.27 CPU) @ 7.01/s (n=100)
>>575 証拠は俺の脳内。
信じられないなら自分でソース読もう。
>>577 void コンテキストで split 使うと @_ に入るので注意な。
lala-zコンテキストなら?
581 :
ジミー:2008/02/29(金) 21:41:12
$str = "a,b,";
@ar = split(/,\n/, $str);
print join(',', @ar);
これを実行すると a,b と表示されます。
つまり、split は末尾の空文字列を取り出してくれないようです。
末尾の空文字列を取り出して、このコードが a,b, と表示させるように
するための簡単な方法ってありませんかね。
(もちろん愚直に工夫すれば何とでもなるが、スマートな解がほしい)
582 :
ジミー:2008/02/29(金) 21:41:59
>581
コード間違えた。(実験してたコードにしてもた。)
× @ar = split(/,\n/, $str);
○ @ar = split(/,/, $str);
583 :
ジミー:2008/02/29(金) 21:46:48
解決した。
@ar = split(/,/, $str, -1);
ですね。
print join ',', split /,/, q/a,b,/, -1;
>>566 特にないけど、Perlならそういう面白いインターフェイスが用意されてそうだなと思ったまでで
麻雀なのに、娘とか嫁とか家族とかw
乞食は想像を絶するなw
スマン、誤爆
色々と妄想させてくれる。
世の中には「義妹が最強だろ」という誤爆レスが元になって作られたゲームとかあるからな。
人間の妄想力ってのは凄いもんだぜ。
589 :
デフォルトの名無しさん:2008/03/02(日) 10:27:48
おにぃちゃん、ヤメテ!
ヘッヘッヘ、いいじゃねぇか ポン ヘッヘッヘ
591 :
デフォルトの名無しさん:2008/03/02(日) 11:09:57
Active Perl 5.10.0 用の DBD-mysql ってどこにあるの?
>589-590
エロゲじゃねーよw
594 :
591:2008/03/02(日) 21:46:50
インスト
泣いても笑っても、お前のまんじゅうは無いよ。
Wiki文法でのテキスト整形で悩んでいます。
改行含めた長い文章が $i に入ってます。
文章中のリンクアンカーに相当する部分はWikipediaなどでお馴染みの
[[テキスト]]
という感じで書かれています。
これを
$i =~ s/\[\[(.+?)\]\]/<a href="$1">$1<\/a>/g;
で変換しているのですが、できれば <a href="$1"> の中のほうの$1をURLエンコードして収めたいのです。
URLエンコードのサブスクリプトはこんな感じです。
sub url_enc {
local($_) = @_;
s/(\W)/'%' . unpack('H2', $1)/eg;
s/\s/+/g;
$_;
}
よろしくお願いします。
すみません、補足です。
CGIにはインフォパスか引数で渡します。
<a href="hoge.cgi?$1">
こんな感じで。
サブルーチンに置換部分をまとめて、
$i =~ s/\[\[(.+?)\]\]/&url_enc($1)/eg;
そっか!e修飾子を利用した時は置換部分は関数以外は入れたらダメなんですね。
$i =~ s/\[\[(.+?)\]\]/<a href="&url_enc($1)">$1<\/a>/eg;
だとエラーが出るんで何でだろうとずっと思ってたんです。
ありがとうございます。勉強になりました。
>>600 自分で '%' . unpack('H2', $1) なんてのを入れてるじゃん。
sub html_escape {
my $str = $_[0];
$str =~ s/&(?!(?:\w+|#(?:[Xx][0-9A-Fa-f]+|[0-9]+));)/&/g;
$str =~ s/([\x00-\x09\x0B\x0C\x0E-\x1F"'<>\x7F])/${ \ ord $1 };/g;
$str;
}
sub uri_escape {
my $str = $_[0];
$str =~ s/%(?![0-9A-Fa-f][0-9A-Fa-f])/%25/g;
$str =~ s/([\x00-\x20"'<>\\^`{|}\x7F-\xFF])/ sprintf '%%%02X', ord $1 /eg;
$str;
}
$i =~ s{ \[\[ (.+?) \]\] } {
my($url, $face) = ($1, $1);
$url = uri_escape($url);
$face = html_escape($face);
qq|<a href="$url">$face</a>|;
}egx;
>>601 すみません、
実はurl_encは誰かから教えてもらったもので丸写しなんです ^_^
でも今回のことでやっともろもろ判りました。
コード、参考になります(というかありがたくいただきます)。
ありがとうございます。
JavaのプログラムからCGIを実行しようとしたのですが、302エラーが返されます。
何故なんでしょうか?
Moved Temporarily
perlのuntil文っていらないと思うんですけど、皆さんどんなときに使ってますか?
使わなきゃいいじゃん
while (! hoge)よりも直感的に書ける場合もある気がする
とくに後置したときに英文っぽくておさまりがいいような
while ( !( ... || ... && ... || ...) )
とかになったらさすがに使うw
あー、あと成功したら0エラーならエラーの種類が1以上って関数が
成功したらとにかく実行って時とかに == 0 とかやらなくて済むとか。
>>609-
>>611 なるほど。参考になりました。
untilも使い道はいろいろあるんですね。
意味的に「〜になるまで続ける」って感じの時も until のがわかりやすいかも
615 :
デフォルトの名無しさん:2008/03/06(木) 02:27:57
XSでCライブラリを使ったモジュールを作ったが、
それが$HOME/local/libのライブラリを使っていて
CGIにLD_LIBRARY_PATHが設定できないのでモジュールで使っている.soが読めない。
$ENVとuse Envでやったが、無視されるみたいだし
共有サーバでhttpdがsuExecで動いているので.htaccessでSetEnvすることもできない。
DynaLoaderがロードする.soがリンクしているsoのパスを指定できる方法ある?
>>615 ldの-Rオプションでバイナリに埋め込むのはどう?
>>615 前スレの570〜580あたりで書き込みした者ですが、
DynaLoader.pmがLoadするだけならば、
use DynaLoader;
@DynaLoader::dl_library_path に、対象のPATHを放り込んでやればLoad出来ます。
その{perl_module}.soがよその(/use/lib,/lib以外の)ライブラリをロードするようにコンパイルされていたら、
多分 use した時点でエラーになります。
618 :
デフォルトの名無しさん:2008/03/07(金) 00:29:37
>>616 >>617 >>615だけど、
Makefile.PLのLDDLFLAGSに-rpath ${HOME}/local/libを追加してコンパイルしたらできた
619 :
デフォルトの名無しさん:2008/03/07(金) 23:14:49
SVGファイルに含まれているパスの情報を取り出したいのですが、
CPANにあるSVGモジュールってSVGを書き出すことはできるのですが、
読み込んで解析するにはイマイチなようです。
SVGファイルを解析するには、どのモジュールを使えば良いでしょうか?
XML関係は充実しているようですが、数が多くてよくわかりません。
620 :
デフォルトの名無しさん:2008/03/07(金) 23:47:51
Windows環境でPARを使おうとしているのですがうまくいきません、
%pp -V
で
Perl Packager, version 0.12 (PAR version 0.90)
と出るので、PARのインストールはできていると思うのですが、
%pp test.pl
などとしても、
数秒固まった後、「parl.exe」が
問題が発生したため終了しました、というXPのよくあるエラーが出て、
Can't spawn "C:\Perl\PAR\script\parl.exe": Bad file descriptor at C:\Perl\PAR\li
b/PAR/Packer.pm line 1234.
となってうまくいきません
parl.exeが落ちる原因について調べても情報を見つけることができなかったので、
どなたか助けていただけませんでしょうか・・・
621 :
デフォルトの名無しさん:2008/03/08(土) 01:12:00
解決しました
PAR-Packerを入れてませんでした
622 :
デフォルトの名無しさん:2008/03/09(日) 19:55:44
Cでいうunsigned int (符号なし整数)は使えますか?
宣言とか必要ないですか?
ぐぐってもsprintfに関する項目しか出てこないので
623 :
デフォルトの名無しさん:2008/03/09(日) 20:55:28
質問です。
Perl でバイナリファイルについて 1byte ずつファイルから読み込んだり書き込んだりするにはどうすれば良いのでしょうか?
getc で一文字読み込むのはわかります。
一文字分のデータを記録した変数を print すれば良いのだろうとも思います。
しかし確実にバイト単位の入出力であることを明示する方法などないものかと疑問に思っています。
よろしくお願いします。
> 確実にバイト単位の入出力であることを明示する
この箇所は、つまりどういう行為を指しているんだろう。
626 :
623:2008/03/09(日) 22:54:21
>>624 > どういう行為を
C 言語の fputc() は int 型のデータを与えても unsigned char として書き込んでくれます。
$c = getc FH; で最初は 1byte だった $c がいつの間にか int や long の大きさになっても char として書き込むことを保障してほしいのです。
「いつの間にか」とは << や * や + などで 256 以上の値になることを想定しています。
Perl の print は何バイトでもまとめて書き込んでくれるので心配なのです。
>>625 すみません、何が逆なのかわかりませんので、お教えください。
>>622 Perl には符号無しは特にないはず。
628 :
623:2008/03/09(日) 23:39:28
これで 1byte のファイルが作成できました。
$c = 255;
$c <<= 1;
open OUT, ">./test.txt";
print OUT pack("C", $c);
close OUT;
__END__
>>622 pack 関数で unsigned char も指定できるようです。
たったいま知ったのですが。
お騒がせしました。レスくださった方々どうもありがとうございました。
629 :
デフォルトの名無しさん:2008/03/10(月) 13:08:00
perlでポインタ演算する方法はありませんか?
配列の要素のリファレンスを使って別の要素にアクセスしたいのですが。
標準ではない。
演算子オーバーロードしたラッパを提供するライブラリがあった気がするけど忘れた
標準では無理なんですか。ライブラリ探してみます。ありがとうございます。
ゴリラみたいなゴツイ身体した外国人Perlerは色々すげえわ
ありゃ勝てない
ある意味超絶ハッカー
perlムズいです。
eval 'case $# in 0) exec /usr/bin/perl -S "$0";; *) exec /usr/bin/perl -S "$0" "$@";; esac'
if 0;
autoscanというのを読もうと思ったら、これがわかりません。evalは中の文字列を
shellとして実行して、その結果をperlとして実行する。でいいのでしょうか?
これは何がしたいのでしょうか?
それとif 0;というのはなんなんでしょうか?
おねがいします。
>>633 とりあえず if 0; がついているので、その文は実行されない。
おそらくデバッグ中か何かでつけっぱなしになってる。
雰囲気からすると、その実行ファイルと同名のものを環境変数PATHから再検索して、
perl で実行しているようだが、実際に書いてあるコードが間違っているので、詳細は不明。
そもそも eval の引数にあたる文字列はおそらくshellスクリプトだが、それをperlでevalしても
文法エラーにしかならんわな。
ありがとう。
if 0;で実行されないんですね。とりあえずここはスルーしようと思います。
パッケージHogeに新しい関数piyoを作り@EXPORTに追加して
使おうとすると
Undefined subroutine &main:piyo called at ./unko.pl line 37
といって怒られる。Hoge::piyoとすれば動くので支障はないけど
Hoge内のほかの関数fuga,funiはfuga() funi()で動くのに
なぜなんだ〜。というわけでエロイ人教えて!
@EXPORT_OK に入ってないとか、use subs ( or use vars ) で宣言されてないとか…
>>636 なるほど。shellスクリプトとして実行されたとき、perlで実行しなおしてるんですえん。
local *_ = \my $a;
これはどういう意味でしょうか?つかググれないよ
$a = "unko";
print ${$_};
>>640 シンボルテーブル上で$_をmy $aのエイリアスにしている。
型グロブでぐぐれ
二次元配列を縦横変換するときの熟語みたいな書き方ってあるんかな?
ActivePerlをインストールしたんですが、
組み込み関数のソースコードをどうしたら見られますか?
巨大な整数乱数を作りたいんだけど、どうしたらいい?
use bigint;
my $n = 7581835939574005820377;
print rand $n;
とかやっても浮動小数点数になるし。
>>649 せっかく複数つなげるのなら、それぞれの先頭と末尾を数桁
切り落とすと凄く乱れちゃうわ
module-starterで作った配布単位に実行可能なスクリプトを追加するにはどのディレクトリに
入れればいいでしょうか。
ぼくは東側に行くよ
変な質問をしてすみません。
Perlで日本語を扱う際の注意点や対策方法は理解し、特にトラブルなく作成、動作させることはできました。が、突っ込んだ説明を求められ、確信できないところだらけで困ってしまいました。どうか助けてください。
※input.datには、Shift-JISで ソ 1文字だけ入っています。
---------------
$literal = 'ソ\';
open(FILE, "< input");
$from_file = <FILE>;
close(FILE);
print "ファイル:$from_fileンナ〜\n";
print "リテラル:$literalンナ〜\n";
if($literal eq $from_file)
{
print "match\n";
}
--------------
上記ソースで、下記の3行が正しく表示されます。シフトJISでの文字コードに0x5Cが含まれる場合、¥を後ろに付加してエスケープ対策をすればよい、ということは理解できました。が、ファイルから読み込んだ場合は、なぜそのままでよいのでしょうか?
自分なりに考えたのは、Perlの構文解析かなにかがエスケープと間違えて、実行以前にソースが正しく読まれていないのでは?と考えたのですが、出力する際の”$from_fileンナ〜”では、なぜ文字化けしないのか、等が説明できません。
リテラルでは書かない、日本語を正規表現で切り抜かない、この2点さえ守っていれば、カタカナ同士の比較は大丈夫!と言えれば、なんとか納得してもらえそうなのですが・・・。
それから、シフトJISの文字列を「,」でsplitするのは危険でしょうか?
どなたかご教授していただければ幸いです。
何卒よろしくお願いいたします。
本題とは違うけどUnicodeでやろうよ
Perlのせいかよwww
>>653 おまえは一体いつの時代のperlを使ってるんだ。
encodingプラグマつかえよ。
いやいや、今だに企業向けのレンサバなんかで5.0.3なんかのとこもあるしなw
しかし、少なくともeucで書こうぜ
それはさすがに商売する気ないだろ
>>658 何年も前から運用されているシステムで、変えたくても変えれないという気が。
商売する気ないのかもしれんけど。
5.6.0出てから既に8年弱だしなあ
5.00なんぼとか言ってたのはWindows3.1とかの時代じゃなかったか。
>>658 encoding プラグマは別の問題があるだろ。
また、馬鹿用のテンプレがなくなってるじゃないか。
そういや5.10にもなって未だに日本語名
フォルダの扱いが変なのは治ってないの?
>>653 「シフトJISでの文字コードに0x5Cが含まれる場合、¥を後ろに付加してエスケープ対策をすればよい」
というのは正確ではありません。中身を展開するクォート(""など)の中にある場合に限ります。シングルクォート
など展開しない場合は、\x5cが含まれていても評価されません。ただし、その文字が末尾に来ていると、
閉じる方のクォートがエスケープされてしまうので、\を足す必要があります。
なお、
chomp($literal = <<'STR');
ソ
STR
とかすれば、\を付ける必要ありません。
ファイルハンドルから取り出したデータは、評価されずにそのまま変数に代入されます。
"リテラル:$literalンナ〜\n"; でなぜ文字化けしないかについてですが、
my $var3 = "おわり";
my $var2 = "$var3";
my $var1 = '$var2';
としたとき、
print "$var1$var2$var3";
はどう出力されるかを考えればわかります。
665 :
デフォルトの名無しさん:2008/03/20(木) 21:03:59
イロハから勉強中です。
print文で画面に表示などは出来ましたが
ファイルの操作が全くうまくいきません。。
下記でtest.logの中身を"test"に書き換えたいのですが、うまくいかず
どこが悪いのかわかりません。
お助け願えないでしょうか?
(くだ質がないのでコチラに書き込んでいます)
$datam = "/log/test.log";
open (TE,">$datam");
print TE "test";
close TE;
data の単数形は datum だ・・・というのは置いといて、
/log に書き込み権限はあるのかい?
>>665 > どこが悪いのかわかりません。
どう「うまくいかず」なのかとか、エラーメッセージとかを書かないところ。
あと、open() の後ろに or die $! と書いてしまう癖をつけてもいいかも。
668 :
665:2008/03/20(木) 21:44:28
>666
まだこんなレベルなので、winにANHTTPdいれてやってます。
ので、書き込み権限は関係ないかと思っています。。
>667
ファイルが書き変わらないのです。
あと、この4行をコメントアウトすると、他のprint文の出力結果が返ってくるのですが、
コメントアウトしないとhttp 500が返ってきます。。
670 :
665:2008/03/21(金) 00:08:14
>669
あぁ。。初心スレあったんですね。
誘導ありがとうございます。
ご迷惑おかけしました。
>>663 直ってないはず。dankogaiにでも聞いてみれば?
>>665 それはともかく初心者なら、自分のディレクトリで読み書き実験
して成功してからパスを目的の場所に変更して完成させる手順を
オススメするぞ
673 :
デフォルトの名無しさん:2008/03/22(土) 04:07:27
このスレの住人なら知っていますね、あの糞開発ツールのことを
・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる
糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。
・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
バグレポートなどしてはいけません。改善要求などもってのほかです。
あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
なんて話が出たら力強く机を叩き、会議室を出ましょう。
あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。
糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
>>673 どこのコピペか知らんが、これ会社で浮いてる奴だろ。
ツールなんて所詮道具。どうでもええわ。
糞開発ツールを批判すると
「あいつは浮いてる奴だから」
と言われる
チベット人が中国を批判した時ににてるな
676 :
デフォルトの名無しさん:2008/03/22(土) 10:47:10
>>674 > ツールなんて所詮道具。どうでもええわ。
こういうことを言う奴は、本当のクソツールを見たことがないやつ。
>>675 糞開発ツールの批判っていうより、
こんなにまで必至に批判してることにだよ。
これ該当ツールの枠越えて、会社や人の批判に走ってんじゃん。
つうか、文頭が毎回”糞”で始まる人間とはあまり関わり合い持ちたくない
みんなスルーしているのに
>>678だけ全身で絡み付いて下半身を押し付けている件。
>>677 >これ該当ツールの枠越えて、会社や人の批判に走ってんじゃん。
それが正しいと思うぞ
糞開発ツールも問題だが、それを無理矢理マンセーする会社や人は
厳しく批判されるべきだろ
批判つっても、2chでクダまいてるだけで、職場じゃ
「ボクは空気読める子なので、胸の内にためこんで良い子ちゃんでいまーす」
ってなもんだろ?
ばっちい空気を読んで糞なものを糞と言えない組織が一番腐ってるよな
>>675流に言えばそういう組織はチベッド弾圧も批判できないんだろうね
>>682 何故そうなってるかも知らずに、1つのツールだけ見て
批判ばかりしてるってのも現場特有の無知さだねー。
ドラマごっこはいいが、あんなの格好だけで嘘ばっかりだよ。
日本語読めないの?叩かれてるのは1つのツールじゃなく
そんなもんを無理矢理使い続ける人間だろ
>>684 君は鉛筆消しゴム始め、全てベストツールで身をかためてるのか?w
でた見当違いの比喩w
>>686 おまえん家の近所のシューズマニアの良夫くんが、
おまえの履いてるシューズは衝撃吸収も中途半端だし
運動効率も悪いから履き替えた方がいいって言ってたぞ。
で、Perl が糞なのか?
盲目的に誉める奴も、盲目的に叩く奴も議論や雑談する奴もいらん。
ここは質問スレだ。
グダグダ言いながら結局は下段の4項目を実行出来ない
>>673が糞
693 :
デフォルトの名無しさん:2008/03/23(日) 11:31:36
Perlは糞じゃないが、Perlで再加工しないと使えないような、
結果を吐き出す糞開発ツールはいっぱいあるよねw
Perlは「尻拭きツール」だからねw
Perlは全体として糞だけど、Perlが他より得意としているものも「かつては」あって、
それがなけなしの存在価値だった。今はそれらも追いつかれて、本当の糞になったけどね。
書きやすいから何も考えずに後で読む
のがしんどいコードを書くことも良くある。
触れ込みどおりかと。
尻拭きwwwww
無駄にライブラリが充実してるからまだ捨てられない
クソだと思うならこのスレ来ない方がいいお(;^ω^)
698 :
デフォルトの名無しさん:2008/03/24(月) 00:43:01
perlでオブジェクト指向プログラミングに挑戦中ですが、
引数でオブジェクトを渡す方法がわかりません。。どなたかよろしくお願いします。
my $unko = new Unko();
$unko->set(1,20080331,"黄色","悪臭","ゆるゆる");
print "排泄日:" . $unko->{dropDate};
# データベースへの登録
my $db = new Dao();
$db->insertUnkoTable($unko);
(以下省略)
{
package Dao;
sub insertUnkoTable {
# データ挿入用のSQL文
my $sql = "INSERT INTO unko VALUES(?,?,?,?,?)";
# 以下でオブジェクト参照を受け取りたいがNULLになっている模様。
my $info = $_;
my $hst = $hDB->prepare($sql);
if ($hst) {
my $ret = $hst->execute(
$info->{dropDate},
$info->{color},
(以下省略)
}
そんなのオブジェクト指向関係ない初歩の初歩だろ。perlsub嫁
>>698 >my $info = $_;
これが変
701 :
698:2008/03/24(月) 00:54:28
>>699-700 レスありがとうございますだ。
my $info = $_[0];
にしてもダメでした。。
リファレンスを渡す必要があるのか?とおもい、
$db->insertUnkoTable(\$unko);
$$info->{dropDate},
とかやってみたけどダメでした。
間違っているのはここではないですか?
「ダメ」ってのをどう検証したんだ?
少なくともPerlにNULLはないが。
>>701 それでよくね?
何か基本が全然分かってないみたいだけど…
704 :
デフォルトの名無しさん:2008/03/24(月) 01:08:37
>>702 my $info = $_[0];
print "確認用:" . $info->{dropDate};
上記のようにして、Sub側で値を表示させてみたのですが、
Use of uninitialized value in concatenation (.) or string at C:/Projects/eclipse/unko/unko.pl line 69.
というエラーが出て、コンソールには「確認用:」しか表示されません。。。
これをもって、$infoがNULLであると判断してしまいました。
コンソールの出力↓
確認用:
perlobj嫁
以下のように修正したら、うまくいきました。
あれですね、この場合も最初に自己リファが渡されるのですね。わかりづら。
my $info = $_[1];
print "確認用:" . $info->{dropDate};
ご迷惑をおかけしますた。
自分でそういう呼び出ししてるだろ
708 :
デフォルトの名無しさん:2008/03/24(月) 11:16:03
/bin/mkdir -p surface/deep/deeper みたいに、一気に深いディレクトリを掘るfunction はないでしょうか。
CPAN で directory とか IO とかサーチしても、見当たらないんですが。
710 :
708:2008/03/24(月) 11:53:12
早! thx
tomcatのserver.xmlで設定が有効な記述のみを抜き出したいのですが、
なにかperlで簡潔にスクリプトを記述できないでしょうか?
コメントの始まり
$start = "<!--"
コメントの終わり
$end = "-->"
として
next ifとかで
start - end間をスキップ
という流れを考えています。
他に何か違うアプローチの仕方ってないでしょうか?
XMLパーサで読んでコメント以外書き出すのじゃダメなの
>>711 712の意見に一票。だが、
while(<>){
next if /<!-/ .. /->/ ;
print ;
}
十分に簡潔じゃね?
>>712-713 迅速なレスthxです。
そうですね、パーサ使うのが一番手っとり早いですね。
ありがとうございました。
>>713 追記です。
実際にやってみたところ、できました。
ホント簡潔ですね。
ありがとです。
>>713だと<!--の前とか、-->の後ろとか消えるから注意ね。
hoge00、hoge01、hoge02というファイルを配列に入れるとき、
@files=<hoge[0-9]{2}>;とやっても駄目なのですが、どうしてですか?
m回繰り返しの{m}は<>内では使えないのですかl?
>>717 <...>の中は正規表現じゃなくてワイルドカードだ。
詳細は perldoc File::Glob を見ろ。
@files=('hoge00' .. 'hoge99');
・・・かしら?
720 :
717:2008/03/25(火) 22:14:36
>>718 でも[]はメタキャラですよね?混乱してきました
>>719 それはちょっと・・・
ifで存在確認するのは面倒です
>>720 ワイルドカードと正規表現は別物
ワイルドカードでは{}は繰り返しではない
[0-9][0-9]にするかreaddirとかで読んで正規表現を使う
722 :
717:2008/03/25(火) 23:55:01
>>721 そうなんですか。おとなしく[0-9][0-9]にします。
ありがとうございました。
>>720 だから File::Glob を見ろってば。
> META CHARACTERS
>
> \ Quote the next metacharacter
> [] Character class
> {} Multiple pattern
> * Match any string of characters
> ? Match any single character
> ~ User name home directory
猫おばさんだよっ!!
perlで2chに書き込むスクリプトを作りたくて、トーク2chを参考にやってみたんですが
POST送信する際にURLエスケープをしなければならない、と書いてあるんですがURLエスケープとは何なんですか?URLエンコードとは違うんですかね?
またクッキー情報をPOSTしなければいけないそうですがどのようにクッキー情報を取得するのでしょうか
おねがいします
728 :
デフォルトの名無しさん:2008/03/26(水) 13:52:07
ググって分からないから聞いてるのに(´・ω・`)
LWPが勝手にやってくれるから気にしなくていい
あとクッキーはcookie_jarに任せると簡単
SOCKET でやってるんだ(´・ω・`)
search.cpan.jpが復活すれば楽なのにな>検索
my $kakiko = "書き込む";
my $ponn = "dhcp-1945.nava21.ne.jp";
my $honbun = "テスト";
$kakiko =~ s/(\W)/'%' . unpack('H2', $1)/eg;
$ponn =~ s/(\W)/'%' . unpack('H2', $1)/eg;
$honbun =~ s/(\W)/'%' . unpack('H2', $1)/eg;
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "POST /test/bbs.cgi HTTP/1.0\r\n";
print SOCKET "Referer:
http://pc11.2ch.net/tech/\r\n";
print SOCKET "Cookie: NAME=; MAIL=; SPID(PON)=$ponn; expires=; path=/\r\n";
print SOCKET "Host: ${host}\r\n";
print SOCKET "Content-length: 101\r\n";
print SOCKET "\r\n";
print SOCKET "bbs=tech&key=1199977642&time=&submit=$kakiko&FROM=&mail=&MESSAGE=$honbun\r\n";
これでやったら書き込み確認になる(´・ω・`)
何がだめなんだろう
> key=1199977642
ここかよ。
なんでLWP使わないの?
このまえ始めたばかりで質問してたら2ちゃんに書き込むなら
SOCKETが良いって言われたんだ(´・ω・`)
LWPも通信はSOCKETだろ?
関係ないけどジャンプのSKET DANCEは面白い
WWW::Mechanize 使いな
基本はLWPと一緒だけど、form絡みがはるかに楽になる
Cookieの指定が滅茶苦茶過ぎる
PON、HAP、hana=mogera 入れろ
WWW::MechanizeってCookieいけるっけ?
747 :
デフォルトの名無しさん:2008/03/26(水) 19:51:53
いけるよ
クッキーに、hana=mogeraがないと投稿確認が出る。
PONとHAPは当然あるものとして。
test
test
test
test
うぜえwww
754 :
デフォルトの名無しさん:2008/03/27(木) 10:56:48
#!/usr/bin/perl
use strict;
my $host="pc11.2ch.net";
my $pon='IPアドレス';
my $HAP='1978965';
my $addr = (gethostbyname($host))[4];
my $name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "POST /test/bbs.cgi HTTP/1.0\r\n";
print S "Referer:
http://pc11.2ch.net\r\n";
print S "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) \r\n";
print S "Cookie: PON=$pon; HAP=$HAP; hana=mogera;\r\n";
print S "Content-length: 65\r\n";
print S "\r\n";
print S "bbs=tech&key=1199977642&time=1&mail=sage&MESSAGE=test&hana=mogera\r\n";
while (<S>) { print; } close(S);
これを実行すると、
HTTP/1.1 302 Found
Date: Thu, 27 Mar 2008 01:40:28 GMT
Server: Apache/2.0.59 (Unix) PHP/4.4.2 mod_ssl/2.0.59 OpenSSL/0.9.7e-p1
Location:
http://server.maido3.com/ ......
Locationで他逝けって言われるんだけど、この後どうすればいいの?
アホですまんです。ちょいと質問です。
○○しています..........
△△しています..........
□□しています....
ってな感じに、「...」でちょっとしたプログレスバー的なものを標準出力で表示したくて、
print "." でぽちぽち表示してってるんだけど、改行するまで画面に現れなくて困った。
とりあえずは、
1/10 done.
2/10 done.
って改行しながら表示してみたらちゃんと動いてるからロジックは大丈夫なんだけどなぁ。
ひょっとして改行入れるまで画面は更新されない?
もしくは、TeraTermで接続して動かしてるんだけど、TeraTerm側の仕様??
タスケテー
>>756 まさにそれだ!!ありがと〜(*´Д`)b
The GUI Loft探してるんですが公式サイト潰れたため見つからなくて困ってます
クリックで<input type="text">の入力値の内容をメールで
送信するフォームを作成しているんだけど、クリック時に一度確認画面を
はさみたいのです。そこでinput type="text"の入力値から一度通常のHTML
テキストを生成し直して確認画面を生成したのですが、その画面から次にメール送信
するときそのテキストの値をCGIが読み取るにはどうしたらいいのでしょうか?
確認画面生成時のように<form method="POST">の中の<input name>の値を
引っ張ってこれたらいいのですが。。
hidden
いちおう言っておくと、フォームでhiddenにしててもいくらでも変なデータ送れるからな。
無理矢理<input type="hidden">をくっつけてやればいいのか!
ありがとうございます!
で、変なデータを送られる可能性があるという事ですかね。
まぁがんばってみます、。
>>762 確認画面を表示するときと同じバリデーションかければ無問題。
確認済みだからと思い込んでノーチェックで通すからセキュリティホールになる。
あと、ユーザが送ってくるデータ以外の情報をhiddenに格納するのも禁止。
764 :
デフォルトの名無しさん:2008/03/28(金) 01:18:04
>>764 ファイル名でもintitleでもぐぐったのに
つうか一度そのサイト行ったのに繋がらなかった 今回は落とせたけど
超d愛してる
766 :
デフォルトの名無しさん:2008/03/28(金) 22:44:45
質問
perlというかCGIなんですが教えてください。
下記ソースでtxtファイル(csvでちゃんと読み込めてるとする)を表示しようとしてます。
#!usr/bin/perl
my $no=$ENV{"QUERY_STRING"};
print "Content-Type: text/html¥n¥n";
print "<html>¥n<head>¥n</head>¥n<body>¥n";
open (NF,"Test.txt");
while(<NF>){
$data=$_;
chomp $data;
my ($datano) = split(/,/,$data);
$hantei = "NF" .$no;
if ( $no == $hantei){print "$no<br>";}else{print "error number<br>";}
print "</body>¥n</html>";
}
close(NF);
これで$no,$hanteiと関係なしに全部のデータを表示してしまいます。
原因がわからないです。
ご教授いただければ幸いです。
>>766 文字列は == で比較してはいけない。eq で比較しゅる。
>>766 条件式で、==は数値同士の判定ってのはしってるかい?
数字かどうか判断したいのなら、正規表現がいいんじゃない?
769 :
766:2008/03/28(金) 23:14:25
>>767,768
ありがとうございます。eqで比較したら希望の$noがヒットしました。
が、ヒット以外、whileですべてのデータをelse表示します。
whileの条件がまずいのでしょうか?
あと今気づいたのですが
$hantei="NF".$no; ×
$hantei="no".$datano; ○
でした。
770 :
766:2008/03/28(金) 23:16:53
重ね重ねすみません。
else表示は当然ですね。もう一回見直します。
ありがとうございました。
いい勉強になりました。
771 :
デフォルトの名無しさん:2008/03/29(土) 01:48:05
そもそも何がしたいプログラムなのか説明も無いのに、
「whileの条件がまずいのでしょうか?」
と聞かれても・・・
while ・・・ 条件が真のあいだ繰り返す。これは分かってるよね?
<NF> ・・・ NF から1行読み込む。
じゃぁ、
while (<NF>) ・・・ NF から1行読み込んだ結果が真のあいだ繰り返す。
(つまり偽になったら終了)
あと、知っておくと幸せになるかもしれないもの
break ・・・ while などのループから強制的に抜け出す
% perldoc -f break
No documentation for perl function 'break' found
771にぴったりのソリューション
つ sub break {last}
>>773 あと、これもおすすめしたい。
sub continue {next}
775 :
デフォルトの名無しさん:2008/03/29(土) 23:31:17
すまん。いろんな言語をやりすぎた。
perl だけやってれば済んじゃうキミたちがうらやましいよ。
776 :
デフォルトの名無しさん:2008/03/29(土) 23:34:15
>>774 continueってCoreにあるでしょ
使ったことないけど
要するに文法も使い分けれない馬鹿と
>>777 その continue はおすすめソリューションが必要な人には向いてないから。
use Switch も要るのかな。
使い分けとか向いてるとかじゃなくてCore関数を上書きしてる
そのおすすめメソリューションとやらは動くのかよ
普通に last next 書いときゃええがな
782 :
デフォルトの名無しさん:2008/03/30(日) 16:20:41
continue使ってんの見たことねーな
>>774 Coreにcontinueあるの知らなかったの?動かないもの教えちゃ駄目よ
use strict;
use warnings;
BEGIN {
*CORE::GLOBAL::continue = sub { no warnings 'exiting'; next }
}
LOOP:
for my $n (0..9) {
no strict 'subs';
continue LOOP if $n % 2;
print "$n\n"
}
すまん。適当ぶっこいた。
785 :
デフォルトの名無しさん:2008/03/31(月) 04:32:31
よろしくお願いしてもいいでしょうか?
CentOS5.0 perl-5.8.8です。
CPANでBerkeleyDBをインストールしようとすると
エラーを吐きます。
ここ読んで対処しましたが、それでもダメでした。
ttp://k2top.jpn.org/diary/?date=20031206 install Net::Server、install Net::Serverは問題なく
できました。
何がいけないんでしょうか?
スレチだったらごめんなさい。
厚かましくも、どこか誘導していただけると幸いです。
> エラーを吐きます。
笑
すごいよなぁw
どなたか、エスパーの方、いらっしゃいますか〜?
--、 _____ -丶
|;;;/::::::::::::::::::::::::::::::/ |
// ̄,'' ̄ ̄\:::::::'''',,,丿
/-=・=- -=・=- _|:::::::::::::\ え?
/ゝ ▼ <:::::::::::::::<:::: ̄--_
---┼/ 、 -─-\--<::::::::::::::::::::-_
--─\ ⌒  ̄ ̄ ̄ゝ::::::::::::::::::::::::::::::::::::::::-_
\__ ゝ/::::::::::::::::::::::::::::::;;;;;;;;;;;::::::::::::\
,,ノ 丿:::::::::::::::::::::::::/:::::::::::::::::::::::::::::::::::|
> /:::::::::::::::::|::/::::::::::::::::::::::::::::::::::::::::::::|
>.,. /::::::::::::::::::ノ;;/:::::::::::::::::::::::::::::::::::::::::::::::::| ____________
/:::::::::::::::::::ノ;;;;|::::::::::::::::::::::::::::::::::::::::::::::::::::|__-||||||::::||||||::::||||\
/::::::::::::::::::/;;;;;;;|:::::::::::::::::::::::::::::::::::::::::::::::::::::|::::|||||||:::||||||:::||||||::::::
(!!!!!!(:::::::::::::::/ ;;;;;;;;;;;;|::::::::::::::::::::::::::::::::::::::::::::::::::::/::::|||||||:::||||||:::|||||||::ノ
(!!!!!!!!!!!!!ノ (lllllllllllゝ:::::::::::::::::::::::::::::::::::::::/-- ̄  ̄
,,,,ヽ::::::::-ゝ:::::::::::/
(!!!!!!!!!!!!!!!!!!!!ノ
>>785 >よろしくお願いしてもいいでしょうか?
はぁ?なんでてめぇごときにお願いされないといけないんだよカスが!
さっさとケツの穴とエラーメッセージの内容を出せよクズ
>>785 あんた、掲示板で質問する能力が欠如している。
このスレだけでも最初から読んで、質問の仕方をマスター
してから出直しなさい。
792 :
デフォルトの名無しさん:2008/03/31(月) 11:13:30
超初心者なんですが、たとえばaiueoと入力してもらったテキストをあいうえおと変換するにはどうすればいいのでしょう?
trを使うのかと思いましたがよくわかりません。
レベルが低くてすいません。
>>792 超初心者とはなんですか?レベルが低いとはどういうことですか?
要求をもっと抽象的に書いてください.
置換対象が"aiueo"だけなのか50音全部なのかもわかりません.
「超初心者」「レベルが低い」のどっちも謝ることじゃないんだけどな。
言い訳にもできないけど。
「エラー吐きます」と言ってエラーメッセージ書かないのがよくない。
>>793 > 要求をもっと抽象的に書いてください.
逆ですよ、逆。
逆ワロタw
796 :
792:2008/03/31(月) 12:31:45
>>792 もう少し分かりやすいようにガンダムで例えてください
798 :
デフォルトの名無しさん:2008/03/31(月) 12:48:06
で?
けっきょくさ、肝心の質問には、誰一人答えられないの?
解答する知識が無いから、グダグダ言ってるだけだろ?
分からないなら分かりませんと素直に言えよ。
知らないんなら出しゃばるな。
>>792 安心しろ、オレが解答してやるから。
>aiueoと入力してもらったテキストをあいうえお
簡単簡単。こうすればいいよ。
$s = "aiueo";
$s =~ s/aiueo/あいうえお/;
print $s;
初心者を煽るバカがいるが気にすんな。
オレみたいに親切でやさしいヤツもいるからさ。
また聞きたいことがあれば遠慮せずに聞いてくれ。
この場合、
if ($s eq 'aiueo'){$s = 'あいうえお';}
が正しいと思う
なあ、
「もう言っている人がおれは言わなくていいか」
という考え方を身に着けようじゃないか、諸君。
きっと正解はこれだよ
$s =~ s/a/あ/;
$s =~ s/i/い/;
$s =~ s/u/う/;
$s =~ s/e/え/;
$s =~ s/o/お/;
せっかくだから最後にgぐらいつけてあげなよ
$s =~ tr/aiueo/あいうえお/;
とかできればいいんだけどなあ。
マルチバイト文字め。
できるだろ。
過去からの声
utf8で普通にやってる俺は勝ち組
正規表現でも文字が文字として使えて快適だぜ
808 :
785:2008/04/01(火) 02:40:39
809 :
785:2008/04/01(火) 02:41:45
DBがインストールされとらん
811 :
デフォルトの名無しさん:2008/04/01(火) 15:16:24
http://www.harukitchen.com/cgi/ こちらの2ショットチャットが、tok2やinfoseekに設置をしても
Internal500エラーで動きません。
パーミッションをreadme通りや、tok2標準にしてもだめでした。
家の環境のhttpd + activeperlの環境ではすんなり動きますので、
sendmailのパスが記述してあることが原因ではなさそうです。
何が考えられますでしょうか?
813 :
デフォルトの名無しさん:2008/04/01(火) 20:23:26
Windows 2003、IISでPerlを使用しDBに接続を行わなければ
ならないのですが、SQL ServerとOracleどちらの方がやり
やすいのでしょうか。
ご意見いただけますと幸いです。
やりやすいって?
幅広さと申しますか、入りやすさと申しますか、主観で
構いませんのでお聞きしたかった次第です。
接続性の観点ならどっちもそんな変わらないんじゃない。
ご意見有難うございました。
OSもWebサーバーもMSなら、データベースもMS製にすればいいんじゃね?
根拠はないけどなんとなく。
perlもms製にすべきだな
ご意見有難うございました。
皆さんにお聞きしたいのですが、
sub abc{ 適当な処理 }
ghq( \&abc );
などととしたときに、関数 ghq の中で引数の関数名 abc を取り出すことはできるのでしょうか?
呪文のような何かをつけるとできそうな感じがしますが、、、どうなんでしょう?
>>821 ghq()をその方法で呼ぶ限りは無理じゃないかな。
どういう目的があってそうしたいかを書けば、適切な答えが返ってくるかもね。
quick hackだが…
あとはdumpvar.pl参考に自分でやってくれ。
sub abc { }
ghq(\&abc);
sub ghq {
local *stub = *{"main::"};
while (my ($key,$value) = each(%stub)) {
if (\&$key == \&{$_[0]}) {
print $value,"\n";
}
}
}
>>823 ほう。関数を片っ端から調べて見つける方法があるのか。
globじゃだめ?
use strict;
use warnings;
sub test {print "test1\n"}
sub test2 {
my $glob = shift;
my $name = *{$glob}{NAME};
my $code = *{$glob}{CODE};
print "$name:$name\n";
$code->();
}
test2( *test );
826 :
デフォルトの名無しさん:2008/04/03(木) 01:11:00
827 :
デフォルトの名無しさん:2008/04/03(木) 01:31:22
828 :
821:2008/04/03(木) 04:12:42
>>822-825 ありがとうございます。
やりたかったことは、ghqの中で関数名とその実行時出力を得ること、です。
関数名を文字列で渡すか、\&参照で渡すか、ぐらいだったので参考になりました。
glob 渡しも試してみます。
829 :
デフォルトの名無しさん:2008/04/03(木) 19:10:26
今定義されている全シンボルを表示するにはどうすればいいでしょうか?
あるソフトが、@INCの関係でうまく動かないようなので、どのファイルが
インクルードされてどのシンボルが定義されたか調べたいのです。
標準モジュールのDumpvalueで見れないかな
エンコードについての質問です。
utf-8 のテキストの中に、混ざっている shift-jis の文字を置換するために、
s/\xe2\x80\x94/−/g;
とします。このとき、
use utf8;
や
use encoding ("utf-8");
を使用していると、上記の置換ができませんので、コメントアウトしています。
このように、utf8フラグは立てないで処理してもよいのでしょうか?
他にもっといい方法があるのでしょうか?
よろしくお願いします。
>>832 まず、なんでutf8とsjisが混ざってるの?
混ざっている状態から、確実にsjisの部分だけが取り出せるの?
あと、コード変換ならモジュール使えばいいんじゃない?
どうしても自前でやりたいというなら、Perlにバイナリだと認識させてから置換すればよいと思う。
>>830 Devel::Symdumpってのがそれじゃないの
835 :
832:2008/04/04(金) 21:58:01
なぜ混ざってしまうのか、よくわからないのです。
元々、sjisのhtmlファイルを、w3mというテキストブラウザで dump したテキストなんです。
それを nkf でチェックすると utf8 で通るのですが、
emacs でいじると sjis にコード変更されてしまう状態です。
今のところ、混ざっているキャラクターは一つなので、
>>832で書いたように、 use utf8; をコメントアウトして s/\xe2\x80\x94/−/g; で、
置換できています。
この方法は、Perlにバイナリと認識させていることになるでしょうか?
>>835 > 元々、sjisのhtmlファイルを、w3mというテキストブラウザで dump したテキストなんです。
w3mでdumpする段階でコード系を制御できるし。
> それを nkf でチェックすると utf8 で通るのですが、
> emacs でいじると sjis にコード変更されてしまう状態です。
emacsでいじる段階でもコード系を制御できるし。
837 :
832:2008/04/05(土) 01:17:40
>>836 どうもありがとうございます。
w3m[mee]でコードを指定するオプションは、euc と jis と sjis で、utf8がないのですが、
具体的にはどうやったらいいのでしょうか。
よかったら教えてください。
現状では、 ja_JP.utf8 の環境で、文字コードにはなにも指定せずに dump させると、
sjis 混じりの utf8 のテキストになります。
それとも、一旦、euc で出力させてから、utf8 に変換すればいいのかな。
emacsでいじる手間をかけないように、
w3m で dumpしたものをそのまま perlスクリプトに渡した結果のテキストが
きちんと utf8 になるのが理想なのですが。
use utf8; を設定する必要が特にないのなら、このままでいいのでしょうか。
838 :
デフォルトの名無しさん:2008/04/05(土) 01:50:52
いいよ。好きにやっていいよ。
>>835 文字コードを意識する処理がない(日本語を一切扱わない)なら、use utf8やuse Encodeを付けなければ、昔のようにバイナリのままになるね。
今後も同じようなことをするなら、手順を見直した方がよいと思う。
>>837 テキストファイルの状態でほしいコードは何?
use utf8をつけてるってことは、何か日本語の処理をするためじゃないの?
あと、-dumpだと桁数の制御など余計な処理が入るみたいだけどそれは問題なし?
さらに、perlでhtmlをとるところからやった方がいいんじゃない?
use LWP::UserAgentとかで調べるべし。
use Encodeで文字コードも簡単に変換できるし、Jcodeになれてるなら、pm版もあるし。
何をしたいかを書いた方が、簡単な答えが返ってきそう。
841 :
デフォルトの名無しさん:2008/04/05(土) 11:09:20
今度Perlを仕事で使う必要が発生したんだけど、
デバッグ等行う際に内部変数の状態を参照したいんで
Eclipse+EPIC+PadWalkerの環境を作りたい思っています。
(Windowsです。ActivePerl 5.10、5.8で試しています。)
Eclipseの最新バージョンを落として、EPICのサイトのURLを
設定して最新版をインストールまでは問題なくできました。
PadWalkerをインストールしようと思い
ppm install PadWalkerとしても、パッケージが見つからず
インストールされないので、
http://e-p-i-c.sourceforge.net/downloads/padwalker_010_Perl5_8_1.zip のファイルをperlディレクトリのsiteに上書きして、とりあえずインストールしました。
この状態で簡単な加算プログラムを作って実行でコンソール上に
計算結果が正常に表示されることは確認。
ブレークポイント付けてデバッグモードで起動してステップ実行できることも確認。
でも、変数を表示する領域になにも表示されません。
$var1 = 1;
$var2 = 2;
$var3 = $var1 + $var2 ;
みたいなもので、$var1〜3の値をデバッグで確認したいんですが、
どうすれば表示されるようになるでしょうか。
それともEclipse+EPICで実施するのが古いやり方なのでしょうか。
※もし板違いの場合、誘導していただけると助かります。
ActiveStateに登録し、ActivePerlをダウンロードしようとしているのですが、
ActivePerl 5.10.0.1002とActivePerl 5.8.8.822のどちらを落とせばいいのかが分かりません。
2つ並んでいるところを見るとそんなに大差は無いのでしょうか?
なんなの最近このスレ
>>842 バージョンが違うんだよ。
自分にあったほうを選べ
>>842さん
自分も最近始めたばかりで先日ダウンロードしました
私もそれで悩んだんです
初心者が挫折しないで継続させれるのはどっちなんだろうか?ってね
私は5.8を選びました
今のところ快適ですよ・・・サンプルを動かすのにはねw
早く自分でバリバリ書いてみたいです
お互いガンガレ^^
847 :
842:2008/04/05(土) 15:24:34
いろいろと機能が増えてそうですし、よくわからないので5.10にしておきます。
ありがとうございました。
848 :
デフォルトの名無しさん:2008/04/05(土) 18:44:51
↑
死亡フラグ
849 :
デフォルトの名無しさん:2008/04/05(土) 22:19:46
int *hoge(void)
{
int i = 5;
return &i;
}
int main(void)
{
int *a = hoge();
printf("%d\n", *a);
return 0;
}
Cでこういうのって、関数hogeのローカル変数のアドレスを返して
いるわけで、あきらかに問題ありですよね?(これだと普通に動いちゃう場合が多いけど)
perlの場合の下記のようなコードって、これも一見普通に問題なく動いてるように
見えるのですが、やはり問題ありなのでしょうか? それともperl的にはこのような
コードはOKなのでしょうか?
my $a = hoge();
print "$$a\n";
sub hoge
{
my $i = 5; # 数値でも文字列でも何でもいいのですが
return \$i;
}
Perlの5.8 -> 5.10には、普通だったら6.0に上がるくらいの差異が。
853 :
デフォルトの名無しさん:2008/04/05(土) 23:56:17
>>849 どのこC使ってるか知らんけど。M$的にはOKなんでないの?知らんけど。
M$はANSI規格を待たずに勝手に、Cに //コメント を追加しやがった無法者だから知ったこっちゃない。
Perlのそれは「レファレンス・カウンタ」でググりなさい。
855 :
デフォルトの名無しさん:2008/04/06(日) 00:26:16
856 :
デフォルトの名無しさん:2008/04/06(日) 00:30:25
今DDE関連のコールバック関数の挙動でちょっと困ってることがあって
my $buf = "\x00" x 256; # malloc
my $pointer = pack ('P', $buf);
こんな感じでポインタ取得して
DdeQuerystringにそのポインタ渡して
DDEサーバーから送られてきたXTYP_ADVDATAデータのDDEcreateStringで作ったhsz1とhsz2のタイトルを取ってるんだけど、
他のマルチスレッドで走ってるプログラムと何故か競合して
たまに落ちる事があるんだけど何が原因なんだろう??
857 :
832:2008/04/06(日) 02:29:08
>>838-840 どうもありがとうございます。
>>839 日本語を置換する必要もありますので、
s/テスト//g;
のような処理もしています。
すると、自分には理屈がわからないのですが、
usr utf8; を付けていないのに、ちゃんと処理されているのです。
処理するテキスト、perl スクリプトとも utf8 なので、バイナリとして扱っていても大丈夫なのでしょうか
>>840 欲しいのは、utf8 コードのテキストです。
日本語の処理は上記の通り、use utf8; なしで出来ています。
「utf8コードのテキストに混ざる、sjisキャラクターをutf8コードに変換する処理」をしたいです。
教えていただいた、perl で html をとる方法も勉強してみます。
余談ですが、w3m の -dump 処理についてアレコレ試したところ、
Locale utf8 では、w3m の出力に、euc-jp や jis を指定しても、出力は utf8、 sjis の文字がのこる
Locale euc-jp では、 euc-jp を指定しても、出力は jis 、 sjis の文字はなし
でした。
>>857 use utf8を付けなくても日本語が置換できるのは、ただのバイナリ列としての比較をしているから。
スクリプトのコードと、変数のコードが同じだからでできているだけ。
全部utf8なら、半角と同じコードが日本語で使われることもないし、日本語1文字を構成している数バイトの途中から別の文字に見えることもないから、特に問題は起きないと思う。
sjisやeuc-jpではこの条件を満たさないから、変な置換が行われることがある。
>utf8コードのテキストに混ざる、sjisキャラクターをutf8コードに変換する処理」
これをしたいのであれば、utf8を付けて、文字コードを意識する必要はある。
読みたいhtmlのソースはsjisみたいだから、Perlでソースから読んだ場合はコード変換がいる。
処理回数が少なければ、nkfやiconvを呼んで済ませるのもありかも。
ただし、「〜」などの一部文字は、コード変換の処理によってはうまく変換されないことがあるからその辺はチェックしておいた方がよい。
w3mの出力で問題ないのであれば、system()で内部から呼び出すやり方でもいいと思う。呼び出すコストが無視できるレベルであれば。環境変数を指定して呼び出せばいいんだし。
ただし、w3mが勝手に整形する部分で問題がなければ。
859 :
デフォルトの名無しさん:2008/04/06(日) 11:45:54
>>857 動いてるは運が良いだけ。そのうち困る。
困る前に、よく勉強しておくことだな。
ユニコードとutf8の違いとか、最初はワケわからん頭がパニくるけど
分かると use utf8 すべきか、しないか、判断できるようになるよ。
シフトJIS だって、マイクロソフトのシフトJIS、IBMのシフトJIS、NECのシフトJIS など
何種類もある。
「〜」 が正しく変換できないのは、Shift_JIS と CP932 の違いが分かってないからだね。
":encoding(shift_jis)" で化けるときは ":encoding(cp932)" にするといい。
860 :
デフォルトの名無しさん:2008/04/06(日) 19:24:40
$iが数字じゃないときにエラーを出す
っていう処理をしたいんだが
if ($i =~ /\D/){
print "error\n";
}
とすると$iが3.5などの時もエラーになってしまいます
どうすれば$iがAやあ、1aなどの時だけエラーが出るようになりますか
教えてください
>>860 use Scalar::Util qw(looks_like_number);
if (looks_like_number($i)) {
862 :
856:2008/04/06(日) 19:57:54
教えて教えて
ごめん、否定か
unless (looks_like_number($i)) {
864 :
856:2008/04/06(日) 20:00:26
ちなみにMSのサイトでDDEのAPIの仕様は熟知しました。
何が原因なのか分かりません。。。
865 :
856:2008/04/06(日) 20:06:30
APIにmallocとポインタ渡してる事に原因があると思うんですが、
他のThreadと競合する理由が分かりません。
ポインタやmalloc渡して、同じような服愛があった人はどうやって解決しましたか??
866 :
856:2008/04/06(日) 20:16:25
服愛ではなく不具合です。。。
867 :
821:2008/04/06(日) 22:57:42
#!perl で testホニャララ っぽい class 作ってみたんですけど、皆さんの意見を伺いたく、、、
package TestX;
my %TR = ();
my @TC = ();
sub before_class { } sub after_class { }
sub before_test { } sub after_test { }
sub before_method { } sub after_method { }
sub set_testsuite;
my $_initialize = sub { my $self = shift; $self->set_testsuite(); $self->before_class(); };
my $_run = sub { my $self = shift;
$self->before_test();
while( $Glob = shift(@TC) ) {
$self->before_method(); $TR{ *{$Glob}{NAME} } = (*{$Glob}->()); $self->after_method(); }
$self->after_test(); };
my $_show_results = sub { my $self = shift;
my $ok = 0; my $ng = 0; print "== Test Results ==\n";
foreach my $k ( keys(%TR) ) { print "$k ---> $TR{$k}\n"; ($TR{$k}) ? ($ok++) : ($ng++); }
print "pass : $ok / fail : $ng \n"; };
sub new { my $class = shift;
my $self = {}; $self = bless $self, $class;
$self->$_initialize; return $self; }
sub add_testcase { my $self = shift;
push( @TC, shift ); }
sub run { my $self = shift;
$self->$_run; $self->$_show_results(); }
sub DESTROY { my $self = shift;
$self->after_class(); }
1;
868 :
821:2008/04/06(日) 22:58:56
初心者なので、ココがヘンとか、普通はこうする、みたいなのをお願いします。
# test の書き方。
package TestZZZ;
use base qw(TestX);
sub abc { print "a-c\n"; return 1; }
sub bcd { print "b-d\n"; return 1; }
sub cde { print "c-e\n"; return 0; }
sub set_testsuite {
my $self = shift;
$self->add_testcase(*abc);
$self->add_testcase(*bcd);
$self->add_testcase(*cde);
}
1;
# 呼び方。
package main;
#use TestZZZ;
TestZZZ->new->run;
>>856 perl でそこまでやらせること自体が間違ってるような気が、、、
だいたい、perl で OOP とか実は間違ってる気がするしなぁ。
869 :
デフォルトの名無しさん:2008/04/06(日) 23:51:37
すいません、今日他の人間が作ったスクリプトを眺めていて不安になったのですが、
#!/usr/bin/perl
sub testSub {
my @aa = ( 1 , 2 , 3 );
my %bb = ( aa => "aa" , bb => "bb" ) ;
return (\@aa , \%bb);
}
#Main
my @a1;
my %b1;
my ($a2 , $b2) = testSub() ;
@a1=@$a2 ;
%b1=%$b2 ;
かんたんにかくとこんな感じのスクリプトだったのですが、そもそも関数内でmyしている変数のリファレンスを呼び出し側に渡すことってありなんでしょうか?
かなり気持ちが悪い気がして直そうか悩んでいます。ご意見をお願いします。
20レスほど前に似たようなものを眺めていたような気持ちです。
871 :
856:2008/04/07(月) 00:05:53
誰もわからないのかよ!!!
>>869 何の気持ちが悪いのか分からんが、どうしてもきになるなら、
return ([@aa] , {%bb});
とでもしとけ。
>>869 > そもそも関数内でmyしている変数のリファレンスを呼び出し側に渡すことってありなんでしょうか?
全然問題ない。↓こういう(man perlobj参照)のもなおしまくる?
sub new {
my $self = {};
bless $self;
return $self;
}
>>872 Cの自動ローカル変数は、関数を抜けたらいつ破壊されるかわからないので、ローカル変数へのポインタを返しちゃいかん
っていう事実との対比で気持ち悪いんじゃね?
>>874 int *hoge(int v) {
int *p;
p = malloc(sizeof(int));
*p = v;
return p;
}
みたいなもんだと思えばおk。
実際、perlの中ではそんな感じで動いてるわけだし。
>>869 > かなり気持ちが悪い気がして直そうか悩んでいます。ご意見をお願いします。
なあ、その気持ち悪さは、はじめてバイクに乗った時にしばしば感じる人がいるという、
「何これ! ペダル押してないのに加速してる!!」という気持ち悪さと同じだぞ。
>>876 オレは車乗るより前に単車乗ったから、その気持ちわからん。
でも、はじめてオートマ車乗った時は「なにこれ、クラッチ切らんでギアチェンジしてる!」っとは思った。
>874
俺、未だに気持ち悪い(笑)
>>860 こんなのは?
if ($i !~ /^\d+$/){
>>879 >>860の
> とすると$iが3.5などの時もエラーになってしまいます
の意味がわかってないのか?
substr("BCD",0,0)="A";
ってやると"ABCD"が返るみたいですけどエラーでる…。
なにか分かる人いますか?
Software error:
Can't modify constant item in scalar assignment at C:\index.cgi line 36, near ""A";"
Execution of C:\index.cgi aborted due to compilation errors.
AN HTTP Daemon v1.42pを使ってActivePerl 5.10.0 Build 1002を入れた環境でやってます。
Can't modify constant item in scalar assignment ってちゃんと教えてくれてるじゃないか
エキサイト翻訳したら
「スカラの課題で一定の項目を変更することができません。」
って出たけど、何が原因なのかさっぱり…。
もうすこし調べてきます!
「substr("BCD",0,0)」が返す定数に「A」を代入しようとしている。
'X' = 'A'
とかしているのと同じ。
あれ?突然できるようになった…??
打ち間違えてたのかな??
$s = "BCD";
substr($s, 0, 0) = "A";
これならちゃんと動くよ
あ、アホやった。
変数渡さないとダメなのか!戻り値がそうなるのかと勘違いしました。
失礼しました。
いや、この場合、perl側の紛らわしさがアホだろう。
例え動こうが変なコードかくな
>>889 > いや、この場合、perl側の紛らわしさがアホだろう。
今回のケースは、
>>881の心の方が2000万倍は異常。
893 :
832:2008/04/07(月) 21:44:59
>>858-859 どうもありがとうございました。
use utf8; なしで日本語が置換できる仕組みを理解することができました。
w3m出力を nkf で utf8 に変換しても残った sjis 文字なので、
sjis のままの html を直接、処理する方が、汎用性のある方法なのですね。
system() や、コードについてももっと勉強したいと思います。
ありがとうございました。
perlでコード補完付きでApacheと連携可能なIDEって無いですか?
EPIC入れたのだけど、コード補完できない上に挙動不安定。
かつ、UTF-8で使用しようとするとEclipseの文字コードを変えてやる必要があり、
変更したら既存のjavaプロジェクトがメチャクチャになったので、勘弁。
IDEじゃないけどEmacsかVIM使っておけば間違いない
というか他に思いつかない
足りない機能は自分で書く
Apacheと連携可能、っていうところがよくわからない。
897 :
デフォルトの名無しさん:2008/04/08(火) 16:19:09
>>861 遅れてすいませんがありがとうございました
[index.cgi]-----------
#! /usr/bin/perl
print "Content-type: text/html\n\n";
print require hoge.pm;
print require hoge.pm;
[hoge.pm]-------------
return "hoge";
----------------------
ってやったときに、index.cgiの2回目のrequireが
重複読み込みとみなされて"hoge"が返ってこなくて困ってます。
なにかいい方法ありますか?
何がしたいんだ
ムチャクチャしよんな
やっぱムチャすか…。
外部のplファイルに関数とか書いて
その関数の戻り値をprintしたいんだけども…
あ、使いたい関数を寸前でreqireすればいいだけか
でけたー!
みんなありがとん(チュッ
……
・w・
イイヨー、イイヨー、
ん?いま、何か通った?
気のせいだよね。
|┃三 / ̄\
|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
>908
お前は呼んでねぇ!
処理の途中でメモ帳を開きたいのですが
for($i=0;$i<100;$i++){
if($i==50){system('C:\WINDOWS\system32\notepad.exe');}
print "$i\n";
}
これだとメモ帳を開いた時点で止まってしまいメモ帳を閉じるまで処理を続けてくれません
これをメモ帳を開いたまま処理を継続するにはどうすればいいんですか?
>>911 use Win32::FileOp qw(ShellExecute);
for(my $i=0; $i<100; $i++){
if ($ i== 50){ ShellExecute('open', 'notepad.exe'); }
print "$i\n";
}
普通にstartコマンド使えと
914 :
デフォルトの名無しさん:2008/04/13(日) 13:43:54
my $counter = 123;
foreach (split(//, $counter)) {
print qq|<img src="$_.gif">|;
}
このコードの中の
qq|<img src="$_.gif">|;
はどういう意味でしょうか?
qq|...| がわかりません。ググッたところqqは"のことらしいのですが。
クォート風演算子
916 :
デフォルトの名無しさん:2008/04/13(日) 14:07:34
q は quote の q、 qq は 2つだから dobule-quote
q, qq のミソは、// として任意の記号を使えること。(括弧の類は開閉対応が必要)
中身で使われていない記号を指定すればエスケープの手間が省けます。
917 :
デフォルトの名無しさん:2008/04/13(日) 14:09:35
ああ、分かりづらいな。例を1つ。
q{ほげ} ---> 'ほげ'
qq/げほほ/ ---> "げほほ"
918 :
デフォルトの名無しさん:2008/04/13(日) 14:20:47
>>915 >>916 >>917 レスありがとうございます。
>>(括弧の類は開閉対応が必要)
ここでの括弧は < と > のことでしょうか?
また、
>>qq/げほほ/ ---> "げほほ"
をあてはめて考えると
qq|<img src="$_.gif">| には //が出てこないのですが、
どう考えたらよいでしょうか?
結果は"<img src=\"$_.gif\">"となるようですが、
ピンときません。
横からスマソ
{}の中にqqがあってその後ろに||が付いているコード貰ったんだけど
{プリント ファイルハンドル qq|プリントしたい文字列|}
qqの外側または内側にを{}や//や||を使い分け方がよくわかんない
{}最強
qq2番手
||3番手
//4番手
って順に内側で使うものデソカ?
920 :
918:2008/04/13(日) 14:31:08
ググりました。
/はデリミタですね。そして、デリミタには | や ( や { や # などが使えるということ。
要は、デリミタと一致しない文字だけで中身を構成すればエスケープの必要なし
ということと理解しました。
ただし、
・カッコの類は閉じること。qq(で始まれば)で終わらせる。
・#で囲う場合には、直後にスペースを入れないこと。(コメントと解釈される)
ってところかな?
要は、都合の良いのをうまく使い分ければよいかと♪
919です
>>920さん
私も参考になったよ
ありがとです^^
923 :
918:2008/04/13(日) 14:54:53
>>921 なるほど。
#はイマイチですね。
なるべく、/ ( { | あたりで開閉することにします。
ありがとうございました。
>>922 どういたしまして。
perl始めたばかりの素人なんで。
CGIとかだと、htmlで " ' をよく使うから
qq(
HTMLのソース
);
とかにしてる。
改行ありならヒアドキュメントじゃあかんのか?
!! をよく使うな。
え!!
質問ってわけじゃないんだけど、ちょっと気になったんで聞いてみる。
とある住所録データベースを以下のように変換したいと思い、コードを書いてみた。
○○市3条 -> ○○市三条 ○○市10条 -> ○○市十条 ○○市24条 -> ○○市二十四条
#!/usr/bin/perl
use strict;
use utf8; #コードはutf8で記述
use Encode;
my $ptan = qw/(\d+)条/;
my $ten = '十'; my $jou = '条';
binmode(STDIN,":utf8"); binmode(STDOUT,":utf8");
while(my $line=<STDIN>){
$line =~ s/$ptan/&ch_kan_jo($1).$jou/ei; print $line ;
}
sub ch_kan_jo{
my $num = shift();
my $src = $num;
if($src==0){ return() ; # Not Doing }
elsif($src<10){ $num =~ tr/123456789/一二三四五六七八九/; }
elsif($src<20){ $num =~ s/([1])([0-9])/$ten.&ch_kan_jo($2)/ei; }
elsif($src>=20){ $num =~ s/([2-9])([0-9])/&ch_kan_jo($1).$ten.&ch_kan_jo($2)/ei; }
$num =~ tr/0//d;
return( $num );
}
(改行多すぎエラー出たんで、ちょっと見にくいかも・・)
これを実行すると、ActivePerl-5.8.8-build822だと、メモリアクセス違反(0x000000を参照)でperl.exeが落ちてしまう。
Linux(Fedora)上のperl-5.8.8-10.fc6.rpmだと期待した通りに動く。実行時間も一瞬で、メモリも少量しか使用していない。
このコードなんかマズイとこある?(再起使ってるけど、他に思いつかなかった。)
それともActivePerlのバグってことでええんかいな?
バグなら報告したらいい
930 :
918:2008/04/14(月) 20:22:45
質問です。
my %hash;
$hash{"hoge"}++;
のように未初期化のハッシュに対して、インクリメントすると
ハッシュには、(キー、 値) = ("hoge", 1) となっています。
未初期化のハッシュに$hash{"hoge"}++;を実行すると値が1に
なるということは元の値は0だったことになりますが、上記のとおり
明示的に0で初期化はしていません。何故0と判断されるのですか?
また、
$hash{"hoge"} = $hash{"hoge"} + 1;
とすると未初期化の値を使用していると言われます。
これと、先の$hash{"hoge"}++;の違いはなんでしょうか?
>>930 つperldoc perlop
undef は常に数値として扱われ、特にインクリメントされる前には 0 に変換されます
(従って、undef のポストインクリメント値は undef ではなく 0 になります)。
>>931 そこだけ引用すると誤解されそうだ。
>>930 未定義値 (undef) を数値コンテキストで評価すると 0 となる。
++ 演算子には 'aa' → 'ab' のように A-Z の範囲でインクリメントする
機能もあるが、undef に対して使った場合は常に数値として評価する為、
ポストインクリメントの場合はまず undef を数値として評価 = 0 を返し、
その後オペランドを +1 する。
故に、
my %hash;
print $hash{'foo'}++, "\n"; # 0
print $hash{'foo'}, "\n"; # 1
print $hash{'bar'} + 1, "\n"; # 1;
933 :
918:2008/04/14(月) 21:37:10
>>931 ありがとうございます。
教えていただいたdocにのってました。
934 :
918:2008/04/14(月) 21:45:21
>>932 print $hash{'bar'} + 1, "\n"; # 1;
については未初期化の値を使用していると言われますが
確かに1が返っていました。ありがとうございました。
@ハッシュのキーが存在しない場合はundefが返る
Aundefは数値コンテキストで評価されると0になる
※++、--は文字列コンテキストでも使用できる。(必要になったら調べます。)
935 :
デフォルトの名無しさん:2008/04/14(月) 21:55:30
perlをWindowsで使っているんですが、PPMで
WWW::Myspaceというモジュールが見つかりません。
これってやっぱり、ActivePerlだからですかね?
PerlでXMLを扱ったお勧め本ってありますか?
まずはこれを読んでおけみたいな。
938 :
デフォルトの名無しさん:2008/04/14(月) 23:03:47
Google
「activeperl ppm "WWW::Myspace"」
上から2番目ぐらい。
939 :
デフォルトの名無しさん:2008/04/14(月) 23:04:20
>936
サンクス、今ようやくインストールできました。
デフォルト以外のレポジトリーを登録できることを知りませんでした。
940 :
デフォルトの名無しさん:2008/04/14(月) 23:22:49
941 :
デフォルトの名無しさん:2008/04/15(火) 11:13:49
>>785 もう解決しと思うが・・・
yum install db4-devel
でやって美奈代
942 :
デフォルトの名無しさん:2008/04/15(火) 11:46:03
Perlってなんですか?
943 :
デフォルトの名無しさん:2008/04/15(火) 11:59:00
ぐぐれ
ぐぐれってなんですか?
百度れ
マニュアルをピックアップしてやるなどの手取り足取りが増えるのに対応して、
マニュアルをも読まない質問者が増大する。
百度れって初めて聞いたがググってみたら結構あるんだな
「百度れ」を百度ってみたらそれほどでもなかった
UTF-8の文字「〜」を
Jcode::convert(\$line, 'euc', 'utf8');
とEUCに変換すると「?」になってしまいます。
(Jcode.pm 0.88と2.06)
文字化けせずに簡単に変換する方法はありますでしょうか?
>>928 再帰+utf8文字列でのtr///(=S_do_trans_simple_utf8が呼ばれる)で落ちるみたい。
再帰前にtr///が実行されるかどうかは無関係だし、再帰前のtr///も普通に成功した。
手持ちの奴だと
○ ActivePerl 5.8.7.813
○ ActivePerl 5.8.8.816
○ ActivePerl 5.8.8.820 2007/01/23
× ActivePerl 5.8.8.822 2007/07/31
× ActivePerl 5.10.0.1001
という感じ。
use utf8;
sub foo {
&foo(0) if $_[0] == 2;
print STDERR "1\n";
tr/あ/A/; # 要utf8
print STDERR "2\n";
&foo(0) if $_[0] == 1;
}
$_='bar'; # $_ = '' にして実行時にdo_transから直にリターンさせると落ちない。
&foo(1); #
>>950 use Unicode::Japanese;
954 :
950:2008/04/15(火) 22:24:26
>>953 文字化けせずに変換できました。
ありがとうございますm(_ _)m
>>950 eucじゃなくてeucjpmsで変換すれば大丈夫。
(sjisじゃなくてcp932使うのと一緒)
dankogaiはJcodeの修正してくれないみたいだしなぁ。
956 :
928:2008/04/16(水) 20:07:49
>>952 わざわざご検証いただき、ありがとうございます。
ひょんなことからWebprog板のほうでいくつかレス頂いたのですが、
さすがにperのl内部関数のことまではわかりませんでした。
> $_='bar'; # $_ = '' にして実行時にdo_transから直にリターンさせると落ちない。
この部分ですが、変換対象($_)が未定義ないし空文字の場合には、
tr///自体が呼ばれない(呼ばれてもなにもしない)ので落ちないとゆう理解でよろしいでしょうか?
あと、再帰しない時と再帰した時で呼ばれる内部関数が異なってるとゆうことですね。
向こうにも書き込みましたが、新buildや、5.10などでfixされているとゆうことは、落ちるのが正常で
落ちないほうがなんらかの不具合が生ずる(から修正された)と考えて、
上記のようなコードを書かないようにしないといけませんね。
初歩的な質問ですみませんが
以下のようなHTMLをはき出すcgiで
"a"の部分をxという変数にしたいんですが
cgi内ではどういう風に記述すればよいのでしょうか?
<input value="a">
print qq(<input value="$x">);
959 :
809:2008/04/17(木) 08:17:31
>810
db4-develのrpmが入ってないって事だったんだですね。
やっと今日理解しました。
もう少し詳しく説明してくれるとうれしかった…。
親切なんだか、不親切なんだか。
でもありがとうございました!
ところで、rpmでperlモジュールを入れた場合と、
cpanでモジュールを入れた場合と、何か違いが
出てくるんでしょうか?
底の底が陥没しているのを見た
>>959 rpmなら依存関係チェックしてくれるから必要なものがわかる。
rpmならyum等を使ってれば一緒にinstallしてくれる。
*-develパッケージはコンパイルするときに必要なだけなのでrpmならいらない。
rpmならコンパイルエラーを見なくて済む。
ってことで、
>>959見たいにエラーがでても理解しようとしない人は
コンパイルはせずrpmでの解決したほうがいい。
そもそもCentOSやRHEL使うなら、手動でinstallは最終手段。
(開発グループいれないとgccが入らない事からも判るとおり)
手動インストールはまた別でしょ
>961
ありがとう。
perlは門外漢だからみなさんを頼ったわけで…。
なんか引っかかるコメントけど。。。
これからはyumでやりますわ。
要はいっしょってことね。
おまえのレスのほうが引っかかるわwww
こういう新人いるわw
社会の理不尽さと厳しさに順応出来ない奴。
駄目新人より使える場合が多いんだけど扱いにくい
>>963 君のエラーメッセージの中にウィルス特有のメッセが
出てたんで教えようかとおもったけどもう教えてやらね