Perlコーディング初心者質問スレ Part 56
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2007/09/16(日) 19:49:43ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん
2007/09/16(日) 19:51:29ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
0003nobodyさん
2007/09/16(日) 19:52:04ID:???[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
00041
2007/09/16(日) 19:56:03ID:???0005nobodyさん
2007/09/16(日) 20:04:09ID:???お疲れ様です。
前スレ最後に質問してしまいました。
こちらに再投稿させていただきますm(__)m
use Math::BigFloat;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
と書くの大変なので
my $a = use Math::BigFloat;
my $tr = $a->new((@array * (1-0.68)/2));
と書いてみましたがエラーでした。
こういう意図を実現するのは無理ですか?
小数の計算をさせた上で配列のインデックスにする場合はBigfloatしておかないと危ないです。
やってない$trに
$array[-($tr +1)];
とすると実質インデックスが2個変わってしまいます。
15.999だったのが、+で16になり、さらに1が足されて17になる。
そんな現象を確認しました。
簡単な記述方法はないでしょうか。
0006nobodyさん
2007/09/16(日) 20:22:00ID:???use bignum
0007nobodyさん
2007/09/16(日) 20:40:18ID:??????
どういうことですか?
英語読めませんが、http://perldoc.perl.org/bignum.html を見てやったところ
全くMath::BigFloatが不要になってしまいました。
冒頭でuse bignumをしておけば小数点の変な誤差が発生することは皆無になるんですか?
代償として重くなるとかがあるので、軽くしたいなら面倒でもMath::BigFloatを使えばいい。
簡単にしたいならbignumを使えばいい?
0008nobodyさん
2007/09/16(日) 20:56:51ID:???my $tr = (@array * (1-0.68)/2);
メチャクチャな計算になりました。
@arrayは100なので16になるべき計算なのに50が入ってました。
もちろんbignumをつかわなければ16が入ります。
bignumを使うと他にも多大な影響があるようですね。
どういう基準で影響を与えてくるんでしょうか。
0009nobodyさん
2007/09/16(日) 21:58:06ID:???$#test
で最後の添え字をゲット。
0010nobodyさん
2007/09/16(日) 23:09:56ID:???再現しない。再現する最小コードは?
use strict;
use warnings;
use bignum;
my @array;
$array[99] = 0;
print scalar(@array), "\n"; # 100
my $tr = (@array * (1-0.68)/2);
print "$tr\n"; # 16
0011nobodyさん
2007/09/16(日) 23:24:10ID:???#!/usr/bin/perl
#京
#use bignum;
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = (@array * (1-0.68)/2);
print $tr;
これでできると思います。EUCコードで記述されています。
use bignum;をコメントアウトするかしないかで表示が変わります。
本来とは違う挙動をしているのでしょうか?
0012nobodyさん
2007/09/16(日) 23:35:36ID:???print 1;
というのが何千行もあった場合
print FH 1;
とやりなおすのは間に色々な式が挟まってる為一括ではできません。
標準出力先をファイルハンドルに変える設定などが冒頭でできるなら一発でできると思うのですが。
0013nobodyさん
2007/09/16(日) 23:36:59ID:???0015nobodyさん
2007/09/17(月) 00:17:12ID:???俺のとこだと再現しないわ。環境は
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
This is perl, v5.8.8 built for cygwin-thread-multi-64int
0017nobodyさん
2007/09/17(月) 00:44:08ID:???This is perl, v5.8.1 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
5.8.1のみの問題ですかね?
そんなに違いがあるのでしょうか。
一体何なのでしょうか?
ちなみにbignumって何に使うためのものなのですか?
浮動小数の誤差関係に使えるというのは一つですよね。
本筋はそれですか?
だとしたらこんな影響が出てしまう理由がわかりませんし。
EUCコードでやっておられますよね?
それかもしかしたらbignumの方がバージョン変わってるとか?
0018nobodyさん
2007/09/17(月) 06:36:57ID:???1. 再現せず。きちんと計算される。
This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level
2. bignum は BigFloat と Math::BigInt, Math::BigInt::Lite のラッパー
それぞれググレ。でかい方に関しては
perl -le 'print 2**2**2**2**2' # => inf
perl -Mbignum -le 'print 2**2**2**2**2' # => やってみ?
とか
perl -le 'print 10**16' # => 1e+16
perl -Mbignum -le 'print 10**16' => 10000000000000000
効能が分るだろ。
0019nobodyさん
2007/09/17(月) 07:36:15ID:???% cat Hoge.pm
package Hoge ;
use 5.005_02 ;
use vars qw( @ISA @EXPORT ) ;
use vars qw( $hoge ) ;
use subs qw( hoge ) ;
use Exporter ;
use Cwd ;
@ISA = qw( Exporter ) ;
@EXPORT = qw($hoge hoge ) ;
$hoge = 42 ;
sub hoge{ return 42 ;}
1;
% perl -Mstrict -Mwarnings -MHoge -le 'print $hoge; print hoge'
ってか朝っぱらから何やってんだろ俺。
0020nobodyさん
2007/09/17(月) 07:37:27ID:???0021nobodyさん
2007/09/17(月) 11:15:49ID:???-cは確か構文チェックをしてくれるわけですよね。
0022nobodyさん
2007/09/17(月) 11:37:55ID:???>84
print scalar(1..99);
>何も表示なし
print scalar(0,1,2);
>2
リストをscalarに渡すとどうなるかというのが知りたかったのです。
要素数を出してくるのか末尾要素だけ評価するのか。
真ん中のやつは何も評価しなかったようですが。何故なんでしょうか。
それとgrepでリストが作られるのかと思っていたら配列が作られているのですよね?これは。
scalar(配列) とすると要素数が出てきて
scalar(リスト) とすると末尾要素が評価される
scalar(n..m) とすると何も起こらない
grepの返り値は配列だということでokですか?
0023nobodyさん
2007/09/17(月) 11:46:15ID:???これをやらせるとIllegal division by zero at hogehogeと警告されます。
0/1
こっちは警告なしなので大丈夫なんだと思いますが。
あまり気にしてないと、無自覚のうちに0による除算が発生してしまうことってありますよね。
意識的に0による除算が行われないよう、例えば
my ($r,$p) = (rand,rand);
print $r/$p;
こういう場合は
my ($r,$p) = (rand,rand);
if ($p>0){ print $r/$p }
と保険?を掛けておくのが推奨されるコーディングなのでしょうか?
0024nobodyさん
2007/09/17(月) 11:56:26ID:???perl -w -le 'print scalar (1..99)'
Use of uninitialized value in range (or flip) at -e line 1.
range 演算子は、君の希望の挙動の他に
while( <> ){
print if ( /^\s+/ .. /^$/ ) ;
}
つう風にも使う。で、上述ではperlの中の人がどっちの機能
を求めているのか判断出来ない。=> エラー出して保留
∴まともに機能してないよ
002522
2007/09/17(月) 12:16:00ID:???while( <> ){
print if ( /^\s+/ .. /^$/ ) ;
}
読めないorz
正規表現の部分は「先頭から空白文字が1個以上あるか」「中身が空であるか」の二つですね。
で、..この範囲演算子はどういう意味でしょう?
ついでにwhileの評価式自体が皆目検討がつきません。
0026nobodyさん
2007/09/17(月) 12:24:45ID:???例だからあまり意味のないものを書いたんで。。。
「先頭から空白文字が1個以上ある行」から
「中身が空であるか」まで
を出力せよ。
と言う意味になります。ホントは/^\S+/ のつもりだったのよw
後は、、、ぐぐれ。
002721
2007/09/17(月) 12:26:13ID:???Use of uninitialized value in addition (+) at 行数
こういうのやsubtractionとかがちょくちょく出てくるんです。
「初期化されてない値を使ってる」みたいな意味だと思いますが、
具体的にどういうエラーなのかわからず再現ができないでいます。
002822
2007/09/17(月) 12:32:34ID:???う〜んどうしてそうやって動くのでしょうか?
一旦中身が空である行を迎えたら自動でループはlastされるのですか?
ifに掛けられるのは1行ずつですよね。
う〜ん・・・
0029nobodyさん
2007/09/17(月) 12:37:27ID:???左の正規表現が真 => スイッチオン
右の正規表現が真 => スイッチオフ
for( 1..1000){
print $_ if $_ == 10 .. $_ == 100 ;
}
つかまじでググってくれ。
21氏は質問の意味自体が理解不能だ。
俺は消えるので、相手してくれる人はいなくなるかもしらんが
頑張れ
003021
2007/09/17(月) 12:38:16ID:???my $ze = $pl + 1;
my $we = $pl - 1;
レスこないのでガンばてたら、これでadditionとsubtractionエラーが再現できました。
この二つのエラーが出たら未定義値が格納されてる変数が計算に使われてるって思っておけばいいですよね。
でも一応スクリプト自体は動くんですが、-wはuse strict程度の感覚なのですか?
0031nobodyさん
2007/09/17(月) 14:45:52ID:???それ範囲演算子じゃないから。普通は使いません、ていうか使うな。
明らかに不適切な例を唐突に持ち出して何がしたいんだか。
0034nobodyさん
2007/09/17(月) 16:27:17ID:???31=21 か?
Programming Perl の P135 の範囲演算子の項を読んだ後に
まともに煽ってくれ。つか突っ込みどころは他にもあるんだから。
0035nobodyさん
2007/09/17(月) 18:09:34ID:???> まともに煽ってくれ。つか突っ込みどころは他にもあるんだから。
とりあえず、該当箇所をスキャンしてうp汁。
0036nobodyさん
2007/09/17(月) 18:24:44ID:???http://perldoc.jp/docs/perl/5.6.1/perlop.pod
の範囲演算子の項はほぼ上述書物と同じだ。
003722
2007/09/17(月) 19:13:34ID:???0038nobodyさん
2007/09/17(月) 19:21:59ID:???↓
> スカラの ".." の被演算子が定数表現であるときは、
> その被演算子は暗黙に、変数 $. と比較されることになります。
↓
ちょっくら$.と比較するか。
↓
$.にundef入ってるし。
↓
Use of uninitialized value
0039nobodyさん
2007/09/17(月) 20:57:51ID:???変な皮肉を言ったり、あえて言葉足らずにしてみたり。
そういう悪い癖に自分で気付いてるんだろうか。
こういうところが、「キモイ」イメージが付いてしまう原因なんだろうな。
0040nobodyさん
2007/09/17(月) 21:44:30ID:???0041nobodyさん
2007/09/17(月) 23:15:28ID:???0042nobodyさん
2007/09/18(火) 01:53:41ID:???0043nobodyさん
2007/09/19(水) 19:41:21ID:uZuxrlKvデバッグの仕方でつまづいています。
というのも CGI::Application の場合 ランモードのそれぞれのメソッドからブラウザに表示させたい
htmlを return しますよね?
で、その途中で 勝手に「 print $hensu; 」みたいにやっても画面上には表示されません。。。
もちろん「 return $hensu; 」とやればその変数の内容は表示されるのですが、複数の変数の値を
一度に表示させたいのですーー。
こんな時みなさんどうしてるのでしょう???
0044nobodyさん
2007/09/19(水) 19:47:18ID:???0045nobodyさん
2007/09/19(水) 20:52:24ID:???CGI::App::Plugin::DebugScreenとかLogDispatchとか使ってたっけかな
手っ取り早いのはData::DumperとかYAML使ってwarnでダンプとか
httpdのエラーログにね
0046nobodyさん
2007/09/19(水) 23:34:44ID:???http://search.cpan.org/perldoc?CGI::Application::Server
http://search.cpan.org/perldoc?CGI::Application::Dispatch::Server
0048nobodyさん
2007/09/20(木) 00:36:25ID:FmGzC+A0プリペアードステートメント使っていますが、肝心の値の部分が「?」なので、実際に流れるクエリが分かりません。
0049nobodyさん
2007/09/20(木) 09:16:22ID:???http://search.cpan.org/~timb/DBI-1.59/DBI.pm#trace
>DBI->trace($trace_setting)
>DBI->trace($trace_setting, $trace_filename)
>DBI->trace($trace_setting, $trace_filehandle)
>$trace_setting = DBI->trace;
0050nobodyさん
2007/09/20(木) 12:35:47ID:yNzQPcIL>>45
43です。レスありがとうございます。
なるほど、簡単にはいかないんですね。。CGI::Applicationしょぼ!
結局グローバルな変数(ハッシュ)に変数の値を保存していって
cgiapp_prerun (メソッド名間違ってたらスマソ)でその変数に
値が入っていればブラウザに表示するという方法でいきます。
ていうかこれぐらいのこともできないのかよ。CGI::Application
0051nobodyさん
2007/09/20(木) 13:40:05ID:???自分の無知を認識しろよ
0052nobodyさん
2007/09/20(木) 13:45:10ID:???0053nobodyさん
2007/09/20(木) 14:21:55ID:???0054nobodyさん
2007/09/20(木) 19:18:46ID:???どこのレンタルサーバでも使えるような方法で頼む。
0055nobodyさん
2007/09/20(木) 21:46:49ID:???0056nobodyさん
2007/09/20(木) 21:49:39ID:???0057nobodyさん
2007/09/20(木) 21:50:20ID:???値は PATH_INFO とかでとればよい。
0058nobodyさん
2007/09/21(金) 04:57:02ID:9/Wk3rtwネットに落ちてるサンプルを見ながら、アクセス解析や掲示板などを書いて
練習しているのですが、データを書き込んでいく空ファイルは
どこのサンプルでも自前で事前に用意しています。
これを、日時ごとに070921.dat、070922.dat…のように自動生成させたいのですが、そのようなことは出来ないのでしょうか?
よろしくお願いします。
0059nobodyさん
2007/09/21(金) 05:11:32ID:???0060nobodyさん
2007/09/21(金) 05:15:49ID:???SSIが使えないならば、直接CGIにアクセスさせるしかないんでしょうか??
0061nobodyさん
2007/09/21(金) 09:28:25ID:???GDでファイルを生成→表示というスクリプトを組んでいますが
どうやら生成されるまえに表示する処理が実行されてしまい。うまくいきません。
リロードすれば表示されるようにはなるのですが・・・
生成されるまで待つ→表示処理実行
という事を考えて生成→slepp 2とか10;→次を実行
と、してみましたがうまくいきません。
生成完了するまでウェイトをかける方法を教えていただければありがたいです。
よろしくお願いします。
006261
2007/09/21(金) 09:35:31ID:EZVVl+6IsleepでOKでした。
よくみると
コメントアウトしてましたw
0064nobodyさん
2007/09/21(金) 20:24:02ID:yGE03KVM例えば print 1; という命令のあるplファイルをダブルクリックしても1が表示されません。
いや正確には一瞬何かが出てきてるっぽいんですが、閉じるの早すぎです。
コマンドプロンプトから実効命令をするとprint先がコマンドプロンプトに来るので、
勝手に閉じることはないようですが。
いちいちコマンドプロンプトやらずに簡単なコードテストの時はダブルクリックで済ませたいのですが
方法ありましたら教えてください。
006664
2007/09/21(金) 21:00:38ID:yGE03KVMありがとうございます。
うまく出ました^^
endって一体なんなのですか?
perlの説明サイトとかで関数調べてendありませんし。
最後にやるってことですか?
となると<STDIN>が閉じさせない命令の本体になるんでしょうか?
どういう理屈なんでしょうjか。
0067nobodyさん
2007/09/21(金) 22:37:24ID:???http://perldoc.jp/docs/perl/5.8.8/perlmod.pod
perlmodのBEGIN, CHECK, INIT and END BEGIN CHECK INIT ENDのところ。
プログラムの終了するところで、
<STDIN>で、コンソールの入力待ちをしてる。
006864
2007/09/21(金) 23:02:02ID:yGE03KVMコンソール???あの黒い画面のことかな。
で、試しに適当に打ち込んだら本当に入力できました。
最後にenterを押したら画面が消えました。
perlの方にはしっかりとその内容が送られてるんですかね?
試しに
my @array = <STDIN>;
print $array[0];
としてみましたが、今度はenterを何度押しても画面が閉じません。
配列に入れてるから無限に取るっぽいですね。
my $scalar = <STDIN>;
print $scalar;
END{<STDIN>}
としたらうまくいきました。
任意の内容を入力してenterした瞬間に制御が一瞬コードに行ってprint $scalar;が実行されました。
ローカルでやるときはこうやって引数を取るというのも面白いですね。
物凄い面白いことを教えていただいて感謝です。
0069nobodyさん
2007/09/22(土) 13:27:49ID:???Class::DBI使ってDB操作する場合、二つのレコード間で主キー以外のデータを交換するには
どのように書いたらいいですか?
0070nobodyさん
2007/09/22(土) 15:58:05ID:???print "content-type:text/html\n\n";
print "<html>\n";
print "<head><title>タイトル</title></head>\n";
print "<body>\n";
print "<h2>テスト</h2>\n";
print "</body>\n";
print "</html>\n";
↑これでInternal server error 500になる。
ただしレンタルサーバー上ではエラーだが、
自分のパソコンでやったらちゃんと表示される。
ソースにもし間違いがあったら
場所と対処法を具体的に指摘しろ。
0071nobodyさん
2007/09/22(土) 17:15:55ID:???態度でかいぞ。
そんなやつには教えてやらん。
#! と /usr の間に半角スペースが入ってるのが問題とか言わん。
007369
2007/09/22(土) 19:54:58ID:???0075nobodyさん
2007/09/22(土) 22:09:17ID:VEv2R0s3http://ws.strikeiron.com/SwanandMokashi/StockQuotes2?WSDL
このサービスを SOAP::Lite から使いたいんですが、ドキュメントのWSDL関連部分を読んでも
use SOAP::Lite;
print SOAP::Lite
-> service('http://www.xmethods.net/sd/StockQuoteService.wsdl')
-> getQuote('MSFT');
としか書いてません。
WSDLを見てみると、GetStockQuotesメソッド(オペレーション?)のパラメタとして
QuoteTicker(MSFTとかの文字列)だけでなく、オブジェクト構造みたいなのを組んで
メアドなども渡さないといけないようなんですが、どう書けばいいんでしょうか。
007675
2007/09/22(土) 22:43:31ID:???> SOAP::Liteでは今のところWSDL 1.1のサポートは限定されているが〔中略〕、
> 複雑な型(types)を記述に含まないサービスにはアクセス可能だ。
と書いてあるので、無理なのかもしれませんね・・・
007775
2007/09/23(日) 03:01:09ID:???http://wsparam.strikeiron.com/BasicRealTimeQuotes?WSDL
という、もっと単純なWSDLを使用。
http://www.strikeiron.com/authentication/
ここの下のほうにPerlのサンプルが(も)置いてあるので、それを改造。
わかりやすいのでSOAP初心者にはおすすめかも。
0078nobodyさん
2007/09/23(日) 03:53:09ID:???なぁーんてこった!
cgiファイルのパーミッションを
755にしたらそれで動いたぜ
そんなこと教科書には
どこにも一言も書いてなかった!
ローカルで動かす教科書だからかな?
サノバビーィーーーッチ!
それでパーミッションが500でも
動くのはなんでだ?
0079nobodyさん
2007/09/23(日) 05:27:46ID:???0080nobodyさん
2007/09/23(日) 06:45:28ID:???0081nobodyさん
2007/09/23(日) 06:53:38ID:???なんか、すごくレベルの高い質問が最近多すぎな気がする。俺のレベルが低いだけなんだろうけどw
Webprogなんだから、動けばいいじゃない的な考えがイクナイ?
0082nobodyさん
2007/09/23(日) 07:50:40ID:???って感じで書いて$mogeが展開されてくれないみたいなんだけど、
特別な書き方があるのかな。
ぐぐったけど正規表現ばかりで、変数をつかってる例が全然見つからなかったんだけど、
こういう記述方法自体があまり一般的じゃなくて、他の書き方があるのかな。
教えてちゃぶだい。
0085nobodyさん
2007/09/23(日) 14:57:13ID:???quotemetaでいけたよ。
1)index($hoge, $moge) でもやったけどダメ
2)auotemeta() してみた
3)$hoge =~ /$moge/ で成功!
4)でもなぜかそれ+ index($hoge, $moge) じゃダメ
って感じだった。
中に入ってるのはどちらもEUCの2バイト文字列なんだけど、
なぜか$mogeが空の文字列として扱われてしまってるっぽい動作だった。
print $hoge.$moge;とかで出力するとちゃんと出力されるんだけどね。
良く分からないけどとりあえず解決はしてよかった。
ありがとう。
0086nobodyさん
2007/09/25(火) 00:47:19ID:XOfpdsF8use strict;
use diagnostics;
という宣言をした状態で、
Name "html::copyright" used only once: possible typo at bbs.cgi line 554 (#1)
というwarningが出ました。
html::copyrightは、htmlモジュール で、
$copyright = 'hogehoge ';
などというように、宣言されています。
warnings は、他のモジュールの変数は見てくれないのでしょうか?
実は、html::copyright 以外にも数十個でていて、紛らわしいことこの上ないです。
(他のwarningにも混じってしまい、識別が困難です)
このwarningをつぶしたいのですが、何とかする方法はないでしょうか?
0087nobodyさん
2007/09/25(火) 00:49:11ID:XOfpdsF8o 実は、html::copyright 以外にも used only once: possible typo が、数十個でていて、紛らわしいことこの上ないです。
used only once: possible typo・・・
は、意味は、わかっておりまして、
一度しか使ってないので、ミスじゃない?ってことなのですが、
実際には、ちゃんと、htmlモジュールで代入してから、mainで参照しているのに・・・ということです。
0088nobodyさん
2007/09/25(火) 03:43:51ID:???Use of uninitialized value
が続かないなら、理由が分からない。
一度ourで宣言してみたらどうなる?
008986
2007/09/25(火) 17:25:00ID:XOfpdsF8-----test_pm.pm-------
package test_pm;
use strict;
use warnings;
our $hoge = "test foo bar";
1;
-----main.pl---------
use strict;
use warnings;
use test_pm;
print $test_pm::test;
-------------------
> perl main.pl
Name "test_pm::test" used only once: possible typo at main.pl line 5.
Use of uninitialized value in print at main.pl line 5.
ちゃんと、Use of uninitialized value でて、実行不能でした orz
ourでも、myでも同じでした
>>86は、CGIなんですが、なんで、ちゃんと動いているんだろ・・・
もうちょっと解析してみます。
009086
2007/09/25(火) 17:28:00ID:XOfpdsF8o print $test_pm::hoge;
スペルミス。
これでも同じ結果です。
0091nobodyさん
2007/09/25(火) 21:26:37ID:o7XeBw4vEND{<STDIN>}
を教えてもらったものです。その節はありがとうございました。
ローカルチェックをする時に、ダブルクリックだけでいいという大変便利なものなのですが、
エラーが出てるときに一瞬で画面が閉じてしまうのです。
ちなみにその時のエラーはuse strictによるmy使え先刻でした。
途中でエラー中断してるのでEND{}まで行かないのは至極当然な話ですが、
エラーの時はエラー内容をSTDINに出力させりょうと思うと大変なことになりますか?
エラーにも色々あるので難しいかもしれませんが、用はコマンドプロンプト画面に出ることを
代わりにそのままSTDINに出力してもらえばいいわけなのですが。
0092nobodyさん
2007/09/25(火) 21:28:39ID:???CGIってことはサバにあるわけだ。
つまり君がローカルで試してるファイルとは違うファイルが動いてる可能性もあるわけね。
009491
2007/09/25(火) 22:20:58ID:o7XeBw4vいえ、単純にちょっとしたコードテストをしたいときにわざわざ
1.コマンドプロンプト画面を開いて
2.ファイルがあるフォルダを開いて
3.黒画面にファイルをD&Dしてenter
という手順を踏むのが面倒だといつも思っていたのです。
1.ファイルをダブルクリックする
これだけで済むなら最高です。
意外に大きな差かなって思いまして。
黒画面へのエラー内容出力ってどういう仕組みで行ってるんでしょうか?
きっとperlの方から出してるんだと思いますが、その出し先をSTDINに変えればできるのでは?
とか思ったり。
0095nobodyさん
2007/09/25(火) 22:46:42ID:???同じファイル?ならコンソール開きっぱなしで1回目だけ「perl スクリプト名」で実行しておけば連続テストは↑+Enterで済む。
慣れにもよるけど多分ダブルクリックより速く操作できる
エラーはSTDERRに出力される。
誤解しているようだけどSTDINは標準入力であって出力ではない。標準出力はSTDOUT
009691
2007/09/26(水) 00:17:27ID:zmZEFb0X2回目以降は確かに楽なんですけど。
STDERRに出力されてるので、END{<STDIN>}で出る入力受付画面には出力されない?
STDOUTへの分はきちんと表示されますし。
STDERRの取得方法があるのでしょうか?
0098nobodyさん
2007/09/26(水) 00:37:06ID:???ラクダ本より
>内部的に発生する例外によって終了する場合でも、ENDサブルーチンは呼び出される(ただし、シグナルによって撃沈された場合は除く)
とあるようにENDそのものが実行されない。自分で(できれば)トラップする必要がある。これはsigtrapを使えばよい。
…が、それくらいなら最初からコンソールから使うことを強く勧める。元々ダブルクリックで起動するようには設計されてないし。
0099nobodyさん
2007/09/26(水) 00:41:02ID:???echo off
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
みたいなバッチファイル作って、,plに関連付けして置くぐらいかなぁ。
統合型開発環境(みたいなエディタ)を使うと、その場で実行して、
その場で結果表示できたりするので、そういうの使うと便利だよ。
0100nobodyさん
2007/09/26(水) 00:56:23ID:???> perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
は
> perl %1 %2 %3 %4 %5 %6 %7 %8 %9
だた。
0101101
2007/09/26(水) 02:22:27ID:???教科書を今日読んで理解したので
型グロブについて誰か質問してください。
説明します。
0102nobodyさん
2007/09/26(水) 05:15:12ID:???0104nobodyさん
2007/09/26(水) 17:01:12ID:???ありがとうございます!
スカラー変数
配列変数
リスト
ハッシュ変数?
それらのリファレンスなど
上記との違いを説明してください。
そして何の為にグロブがあるのですか?
僕は素人なのでまだ使うべきところに出会っていません。
いや使えてたらもっと簡単につくれてたのかもしれません。
0105nobodyさん
2007/09/26(水) 18:35:06ID:???0106nobodyさん
2007/09/27(木) 02:15:46ID:rW8f5K4dif($Fm{'form'}){ 処理 } #フォームに何か入力されていれば処理
上記の場合
フォームに0と入力した場合もスルーされてしまいます。
認識させるにはどのような書き方になるのでしょうか。
if分の前に
$Fm{''form'}=sprintf( "%c", $Fm{''form'} );
のように文字列にするという方法を思いついたのですが、ちょっとスマートじゃないなと思っています。
よろしくおねがいします。
0107nobodyさん
2007/09/27(木) 02:23:35ID:???0109nobodyさん
2007/09/27(木) 03:41:52ID:???0110nobodyさん
2007/09/27(木) 06:29:35ID:???リストに格納したいのですが、プレフィックス長(=120)に応じて
展開する部分が一部不完全なので教えてください。
下のコードだと、下4桁の連番生成しかできない上に、プレフィックス長が4の倍数でない場合にうまくいきません。
これを4の倍数でなくても&下4桁以上もちゃんと展開できるようにしたいのですが…。
たとえば、1000:1234:abcd:2000::/127であれば、
1000:1234:abcd:2000:0000:0000:0000:0000
1000:1234:abcd:2000:0000:0000:0000:0001
の二つが出来てほしいのです。
できれば10進数で連番作ったものを16進数変換してる部分もなんとかしたいんですけど…。
sub _Gen{
my ($addr, $pref) = split(m|/|, $_[0]);
$addr = &_Format($addr); # ここで省略のない32桁の英数字を4桁ごとに:で区切ったものになる
$addr =~ s/://g;
if($pref % 4 != 0 || $pref < 112 || $pref > 128){
return;
}elsif($pref == 128){
1 while $addr =~ s/(\w+)(\w\w\w\w)/$1:$2/;
return $addr;
}
my $fixed = substr($addr, 0, $pref / 4);
my $keta = (128 - $pref) / 4;
my (@addrs, $tmp);
for(my $i=0; $i<16**$keta; $i++){
$tmp = sprintf("$fixed%0${keta}x", $i);
1 while $tmp =~ s/(\w+)(\w\w\w\w)/$1:$2/;
push(@addrs, $tmp);
}
return @addrs;
}
0111nobodyさん
2007/09/27(木) 06:34:39ID:???0112101
2007/09/27(木) 09:02:14ID:???スカラー変数
アレイ
ハッシュ(連想配列)
この3つを同時に
扱うために、型グロブは
生まれてきたのです。
0113101
2007/09/27(木) 09:04:34ID:???$a ←これはスカラー変数
@a ←これはアレイ(配列)
%a ← これはハッシュ(連想配列)
aの左側についてる記号は
$だったり
@だったり
%だったりとそれぞれ違うが
記号の右側はaで全部統一されている。
このとき
あ
「aの型グロブ!」
と宣言すれば、
$a @a %a
この3つを全部同時に扱うことができる。
これが型グロブ。
0114nobodyさん
2007/09/27(木) 09:14:21ID:???0115101
2007/09/27(木) 09:59:46ID:???4年1組と
4年2組と
4年3組が
いたとして、
「4年生全員集合!」
と言うと、4年生が全員集まってくるのです
これが型グロブです。
0116nobodyさん
2007/09/27(木) 11:04:43ID:???を語らないと通じないでしょ
肝心な部分が抜けてるポ^^
0117nobodyさん
2007/09/27(木) 13:26:43ID:???どっちかというと「全学年の1組集合」の方が近いのではないかと。
0118nobodyさん
2007/09/27(木) 13:32:25ID:???0119118
2007/09/27(木) 13:33:29ID:???0120nobodyさん
2007/09/27(木) 13:34:07ID:???0121nobodyさん
2007/09/27(木) 13:58:24ID:???なんでおじちゃんたち
DBが全部やってくれることを一生懸命書いてるの?
0122nobodyさん
2007/09/27(木) 14:53:03ID:???0123nobodyさん
2007/09/27(木) 15:13:12ID:???それとも手をつけたことがない?
後者なら絶対覚えたほうがいいよ。
生産効率が全然ちがうよ
0124nobodyさん
2007/09/27(木) 16:59:17ID:???これじゃだめなん?
use Net::CIDR;
print join("\n", Net::CIDR::cidr2octets("1000:1234:abcd:2000::/127"));
0125nobodyさん
2007/09/27(木) 17:11:50ID:???ゴミ箱にごみを捨てるのは、わざわざ執事雇って呼んで捨てさせる程の事じゃないしぃ
0127nobodyさん
2007/09/27(木) 20:05:25ID:fs1IYXrArand ≠ rand(1)
となるものはあるのでしょうか?ちなみに自分のactiveperl fow win32 5.8は
rand == rand(1)
になっていると思います。
サバによって違うなら面倒でもrand(1)としといたほうが無難なのでしょうか?
それと演算子の優先順位をわかりやすい表にしてるところ知っていたら教えてくださいませm(__)m
last if 1-rand(1) <= 0.3;
こういうの書く時
last if ( (1-rand(1)) <= 0.3);
とすれば確実ですが、地味に面倒で意外と見づらいです。
0128nobodyさん
2007/09/27(木) 20:36:42ID:???その手の仕様をプラットフォームによって違うようにする必要性がないし
0130127
2007/09/27(木) 20:54:10ID:fs1IYXrAそうですよね。まあでも括弧を外すなら結局rand(1)としないとしつこく引数にとられてしまいますね。
>>129
英語のページですか・・・
僕の学力の低さを見透かしたような皮肉orz
バカにでもわかる一覧表的なページはないということでFA?
0131nobodyさん
2007/09/27(木) 21:18:44ID:???print 1;
}
1と表示されます。unlessは条件式が偽を出してくる時にブロックを実行するのですよね?
0 and 1なら片方が真を出すのでブロック実行されないと思ったのですが。
複数の条件式が全て偽を出した時にだけブロック実行をさせたいのです。
回答宜しくお願いいたします。
0132131
2007/09/27(木) 21:22:38ID:???if (1 and 0){
print 1;
}
これです。何も表示されません。先ほどのunlessとの整合性がつきません。
ifによる条件式部分ではちゃんと二つ共が真の時だけ実行されるのに、
unlessの場合は片方が偽を出せば実行されます。
もしかして
真 and 偽
は最終的に偽扱いされるのですか?
0134nobodyさん
2007/09/27(木) 21:28:52ID:???(「真」かつ「真」)なら結果「真」と評価できる
つまり、(0 and 1)は常に「偽」と評価される
だから unless (偽) は常にそのブロック内が実行される
0135131
2007/09/27(木) 21:46:53ID:???やはりちょっと違いますねunlessは。
ifのfalse版みたいに思うと微妙にやられますね。
全然関係ない話ですが、Perlには資格ってあるのですか?
書道3段とか簿記3級みたいに客観的にPerlにおけるプログラミング力を第3者に示すもの。
頑張って勉強してそのうちバイトでプログラムの仕事取ってみたいですが、
その時にそういう資格的なものがあるなら売り込みやすいなと思いまして。
本当に関係ない話ですいません。
0136nobodyさん
2007/09/27(木) 21:59:00ID:???http://perldoc.jp/docs/perl/5.8.8/perlop.pod
0137127
2007/09/27(木) 22:08:14ID:fs1IYXrA日本語のページありがとうございます。
見てきますm(__)m
0138nobodyさん
2007/09/27(木) 22:39:59ID:???0140nobodyさん
2007/09/28(金) 00:24:10ID:???my ($s1,$s2............$s20);
my (@r1,@r2............$r20);
全部書くのが面倒な時は簡単な方法はありますか?
0141nobodyさん
2007/09/28(金) 00:37:13ID:???そんなことすんならuse strict使わない、宣言しないほうがよっぽどいい
0142140
2007/09/28(金) 00:42:26ID:???# 初期化
というところでいっぺんに使う変数を宣言しています。
何故というより癖みたいなものですかね。
それで分析プログラムを作ってたら、やたらと記録や集計用の変数が必要になったんです。
一つ一つまともに名前を考えるのが非効率なのでそこだけ適当な名前にしています。
strcit使いながら賢く宣言できませんか?
無理ならあきらめます。
0143nobodyさん
2007/09/28(金) 01:00:34ID:???0144nobodyさん
2007/09/28(金) 01:01:15ID:???キー名を考えるのは同じだけど
0145nobodyさん
2007/09/28(金) 03:02:00ID:???なんか、その変数名だと単に配列と二次元配列の初期化だけですむ気がすんだけど?
my ( @s, @r ) ;
# @s は、オマエさんの ( $s1, $s2, ..... ) を入れる配列
# @r は、オマエさんの ( [@r1], [@r2], .... ) を入れる配列
本当に別々の変数名が必要なのか?
本当に必要ならば上の人たちが言ってる通りハッシュorハッシュリファレンス
使え。
0146nobodyさん
2007/09/28(金) 03:04:18ID:???0147140
2007/09/28(金) 06:42:10ID:???ごもっともなんですけど、リファレンスにするとコードが汚くなるんですよね。
いちいちデリファレンスしながらのコードは読みにくいし。
ハッシュも同じです。単なるスカラーと配列変数以上に読みやすいものはないかと。
>>146
それってforブロックの中でローカル化されてませんか?
evalするとローカル化されないとか?
0148nobodyさん
2007/09/28(金) 06:53:34ID:???そのevalに突っ込み入れられる実力があれば、
キミの望んだことは実現出来るよな?
まあ、自分の考えに固執しないで、他の人が普通に「hash使え」って
言ってる意味を考えた方が良いと思うけど。
=> perlでは143-145が普通の感覚だし、たかだか変数の
宣誓にevalなんぞ使ってたら「変態さんがいるわ&hearts」
と言われること受けあいだ。
そもそもそんなに個別の変数が必要か否かを考え直したほうがいい
んじゃね?
0149nobodyさん
2007/09/28(金) 08:03:45ID:???書道の段位なんて流派ごとに異なるので、客観性があることにできないんと思うよ。
日商簿記2級くらいまでなら試験対策する時間さえあれば能力関係なしにとれるから
持ってたからといってだから何?レベルだよね。
0150nobodyさん
2007/09/28(金) 08:31:35ID:???脳内では、コレが参考になるかもしらんが、
○自己判断のレベルが客観的判断のレベルと一致しない。
○レベル7と8との間にとても深くて暗い河がある。
プログラミングの技量の判断として有名なのはFizzBuzz問題
だが、有名になりすぎて知ってて当たり前。
0151nobodyさん
2007/09/28(金) 12:19:13ID:???0153nobodyさん
2007/09/28(金) 15:13:33ID:???とか思ってる他人のソース弄って何とかしている人がここに一人。
0154nobodyさん
2007/09/28(金) 15:43:49ID:???0155nobodyさん
2007/09/28(金) 15:58:21ID:???0156nobodyさん
2007/09/28(金) 16:22:17ID:???0157nobodyさん
2007/09/28(金) 16:32:49ID:???0158nobodyさん
2007/09/28(金) 17:27:09ID:???0159nobodyさん
2007/09/28(金) 17:36:03ID:???スコープ区切って引数と戻り値のやりとりするほうが100万倍読みやすいよ
0160140
2007/09/28(金) 18:12:42ID:???>そのevalに突っ込み入れられる実力があれば、
>キミの望んだことは実現出来るよな?
すいません。もう少し普通の会話がしたいです。
>そもそもそんなに個別の変数が必要か否かを考え直したほうがいい
んじゃね?
このよくある「答は一つ、綺麗でスマート」っていうのはどうにも好かない。
0162nobodyさん
2007/09/28(金) 21:25:32ID:???「Perlはあなたが自分の首を締めるのに十分なロープを
提供しているのだ」てな忠告がラクダ本に載ってたな。
#--- Filter/Range.pm ---
package Filter::Range;
use strict;
use Filter::Simple sub {
s{
my \s* \( \s*
([\$\@%][A-Z_a-z][0-9A-Z_a-z]*?) ([0-9]+) \.\. ([0-9]+)
\s* \)
} {
'my(' . join(',', map "$1$_", $2 .. $3) . ')'
}egx;
}; 1;
__END__
#!/usr/local/bin/perl -w
use strict;
use Filter::Range;
my($s1..20) = (1..20);
print $s10;
__END__
0163nobodyさん
2007/09/28(金) 21:41:10ID:???0164nobodyさん
2007/09/28(金) 22:27:42ID:3wKaaJqT同じディレクトリに5個くらい違うCGIファイルがあります。
5個のCGIファイル全てに、冒頭の10個のサブルーチンをコピペしてあります。
print routin(1,2);
5個のCGIふぁいるではこういう記述でサブルーチンが使えます。
どうもこれを外部ライブラリ化とかいうのすると
print パッケージ名::routin(1,2);
で使えるようになるとか。
でもパッケージ名を入れるとなると5個のCGIファイル全てを書き直すのが嫌です。
またパッケージ名が入って見た目がウザくなるのも嫌です。
外部ライブラリにしながらも、メインパッケージにあるのと同じごとくサブルーチンを使うにはどうすればいいでしょうか?
メインパッケージに初めに全部もらえばいけるんじゃないかとか妄想していますが。
0166nobodyさん
2007/09/28(金) 22:45:38ID:3wKaaJqT0167nobodyさん
2007/09/28(金) 23:42:41ID:???全部plファイルにしてrequireでつなげろ
0168nobodyさん
2007/09/28(金) 23:57:57ID:???0169nobodyさん
2007/09/29(土) 00:02:00ID:???すげえまじで感動したw
つか、require '....pl' ってperl4時代のモンだと思って使ってもなかったよ。
これからも使わんけどw
もちろんstorableとか使用するときには必須>require
0170nobodyさん
2007/09/29(土) 00:04:52ID:???0171nobodyさん
2007/09/29(土) 00:51:07ID:2KPMiuugえ?
明日試してみます。
0172nobodyさん
2007/09/29(土) 02:58:11ID:???おらぁ使いまくりだ
メインCGI一個に 汎用サブルーチンplに処理ブロックごとにpl分割
これが楽でいい。
0173164
2007/09/29(土) 06:51:46ID:2KPMiuugできないんですけど・・・・
s.plのpackage s;にサブルーチンを移しました。
で、
print check(1,2,3,4,5);
でエラーでました。メインパッケージにそんな関数ないと。
もちろん
print s::check(1,2,3,4,5);
なら動作します。
どういうことですか?
ウソ付きましたか?
0174nobodyさん
2007/09/29(土) 07:14:33ID:???一応完成したのですが、時間の捉え方が「残り時間」というものになっています。
これを例えば、9時〜12時の間とかで捉えたいのです。
今は内部の処理が進むにつれて「残り時間」の変数を減算して、「残り時間」変数が0になったら処理おしまいというものです。
これを開始時刻と終了時刻を初めに決めて、+10秒とか命令出しながら実際に時間が進んでるかのような感じに
「今何時?」と聞けるくらいの感じに変えてみたいのです。
使えそうなモジュールがあったら教えてください。
0176nobodyさん
2007/09/29(土) 12:27:00ID:???$test = 'abc';
という変数があるとして、$testの'test'の部分を知りたいのです。
例えば、@a = ($test, $boo, $hoge);
という配列があるとして、
これを それぞれ変数名 => 値 というハッシュに変換したいのです。
$h{'test'} => 'abc'
のように。
0177nobodyさん
2007/09/29(土) 13:07:39ID:???> @a = ($test, $boo, $hoge);
この時点で $a[0] には $test が持つ値 'abc' そのものがコピーされて入る。
よって代入後に @a 内の各値からコピー元の変数名を辿る事はできない。
0178nobodyさん
2007/09/29(土) 21:46:18ID:m5gmrcyEuse Jcode;
$str = "あああ";
print Jcode->new($str)->utf8;
とすると
Undefined subroutine &Jcode::_Classic::euc_utf8 called at パス/Jcode/_Classic.pm line 255.
というエラーが発生してしまいます。
ちょっと調べたらJcodeのバージョンを下げれとありましたがそれは無理なので何か他に方法はないでしょうか。
0179nobodyさん
2007/09/30(日) 02:32:26ID:???0180nobodyさん
2007/09/30(日) 04:35:03ID:???使っているPerlのバージョンは?
Jcodeはどのようにインストールしたもの?
>>179
Web関連のムックで書いてなかったか? >Enocdeの使い方
0181164
2007/09/30(日) 08:09:20ID:9pVP3h63そりゃ中身なにもないものをrequireしてもしょうがないからですよ。
一体何が間違ってるというんですか?
メインパッケージにないものをrequireを使えば
routin(1,2,3);
で呼べるというのは本当なんですか?ウソなんですか?
0182nobodyさん
2007/09/30(日) 08:18:04ID:???0184164
2007/09/30(日) 08:40:27ID:9pVP3h63だから何をどうしろというんですか?
最小コードを教えてください。
0185nobodyさん
2007/09/30(日) 08:49:27ID:???181の事を示して言ってるならwarningsもstrictも無関係にエラー出るぞ。
176はそう言う次元のお話しではないし、
178は、my宣言してないからwarningsとか宣言してないと見るが?
別にstrict,warningsを嫌うのは勝手だけど、事象は切り分けてくれ。
ここは初心者スレで勝手に脳内変換して>>182を信じてしまう人が
いる可能性もあるんだから。
0186nobodyさん
2007/09/30(日) 08:59:25ID:???うざいなあ、ここで文句垂れてる間にググればとっくに exporter の使い方も
習得出来てるだろうに
% cat foo.pl
sub foo{ 1 ; }
1;
% perl -le 'require q{foo.pl} ; print foo()'
1
0187nobodyさん
2007/09/30(日) 09:40:39ID:???ああごめん。mod_perlと混同して勘違いしてた。
Perlが初めての方なら尚更strict/warningsは
ややこしくなるから不必要だと思うけど。
0188164
2007/09/30(日) 10:10:19ID:9pVP3h63突っ込みが下手すぎ。
package使うなって言って欲しかった。
0189nobodyさん
2007/09/30(日) 10:12:50ID:???くだらない質問でもど偉そうに聞いていいスレ
http://pc11.2ch.net/test/read.cgi/php/1158647441/
0190164
2007/09/30(日) 11:09:19ID:9pVP3h63まだ使う側でないというなら、今のうちに間違いを指摘してきた相手が目下だと反省のできない上司にならないよう気をつけておけ。
0191nobodyさん
2007/09/30(日) 12:11:48ID:???「最小コードを書け」
って言われたから書いたまでだが?
>>175で package に関する点は指摘されてるだろ
>>187
mod_perl の mod の字も出てないのに…
0192nobodyさん
2007/09/30(日) 12:51:11ID:???上げて回答者を批判する男の人って…
0193164
2007/09/30(日) 14:35:18ID:9pVP3h63>>175のどこがpackageに関する点の指摘なのよ。
あれじゃサブルーチンを別ファイルに移した事の指摘だろ。
>>192
女ならいいのか?クソフェミニストめ。
0194nobodyさん
2007/09/30(日) 15:37:17ID:???すみませんが宜しくお願いいたします。
特定の契機を迎えたとき?
@_や$_には値が自動でセットされるようになっていますよね?
その契機の一覧みたいなものが知りたいのですが、膨大ですか?
うまくまとめてるサイトあれば教えてください。
0195nobodyさん
2007/09/30(日) 15:38:11ID:???0196nobodyさん
2007/09/30(日) 15:44:41ID:???http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlvar.pod
http://perldoc.jp/docs/perl/5.6.1/perlvar.pod
ラクダ本
0197nobodyさん
2007/09/30(日) 16:14:26ID:???5.005とか5.6と互換を取るのに便利だったりする。
(5.005は古いバージョン使ってたり、変換規則が違ったりするけど。)
それはともかく、チュートリアルをpodで欲しいとか思うよね。
unicodeのチュートリアルとか、あっちこっちにドキュメントが散らばってて、
しかも、翻訳も無かったりして、初心者にはきついと思う。
0198nobodyさん
2007/09/30(日) 23:01:50ID:???PerlのパスをUNIX風に設定しておくことってできますか?(usr/bin/perl)
今は5.8なんですが、前に5.6の頃、実際のパスがc:\perlだとしても
この書き方(パス)で動いてた気がするんだけど・・・
0199nobodyさん
2007/10/01(月) 00:24:00ID:???0200198
2007/10/01(月) 01:04:55ID:???すんません、ブラウザでCGIとして起動した場合はどうですか?
関連に気づかなくて書かなかったんですが、
こちらでもプロンプトでは動くんだけど、ブラウザではアウトです。
0201nobodyさん
2007/10/01(月) 01:27:53ID:???0202nobodyさん
2007/10/01(月) 02:12:06ID:???なので他の適切なスレを当たって下さい
0203198
2007/10/01(月) 02:14:31ID:???ありトゥース!・・・が、しかし。。
恥をしのんでお尋ねしますが、パス通すって・・?
Windowsの環境変数にusr/bin/perlを追記するってことではないですよね。
い、いかように・・・
0204nobodyさん
2007/10/01(月) 07:19:52ID:???0205nobodyさん
2007/10/01(月) 09:49:39ID:4GodVsb7レス遅くなってすみません。
JcodeやめてEnocdeで対応させました。
perlのバージョンは5.8、Jcodeは最初サーバーには入っていなかったので
自前で自分のディレクトリにインストールして使ってました。
それで問題なかったのですが最近サーバの方が用意してくれたらしく
そっちを読み込むようになってました。
そのサーバにインストールされた新しいJcodeで問題が発生していたと言う次第でした。
しかし新しいJcodeはなんであんなとんでもないバグを持ってるんだろうか。
UTF-8変換できなきゃJCodeの存在意義が無くなるのに。
0207nobodyさん
2007/10/02(火) 00:21:38ID:???かなり無理やりな解決方法。
C:\直下にusrを作って、そこへC:\Perl\bin\(Enter連打でinstした場合)をフォルダごとコピー。
でC:\Perl\lib\とC:\Perl\site\もフォルダごとコピー。
これでC:\usr\直下に、binとlibとsiteができる。
それでcgiファイルの頭に
#!/usr/bin/perlでOK。
でも、ppmや、自前でモジュールインストールする度に、本来のC:\Perl\以下よりlibやsiteをコピー
しなければならないし、UpgradeやUninstallの時も当然ながら消してはくれません。
普通の人にはお勧めできない。
実を言うと、C:\直下にusrやtmpやvarなんかを作ってると、perlスクリプトの中からフルパスで
/var/tmp/〜とかやってファイル操作したりするのに、Unix環境といちいち書き換えなくて済むっちゅう
横着ができたりします。
0208nobodyさん
2007/10/02(火) 00:40:37ID:???0209nobodyさん
2007/10/02(火) 01:54:23ID:???LWP::UserAgentとCrypt::SSLeayを利用して、SSLでサーバと通信を行っています。
相手先の証明書が、期限切れなど信頼できない場合は、以降の処理を打ち切りたいのですが、
それを判別するにはどうすればよいですか?
0210nobodyさん
2007/10/02(火) 02:05:01ID:???0211180
2007/10/02(火) 02:34:16ID:???ん、別に少し間が開いたくらいは気にせんからいいよ。
ただ、サーバー管理者が入れたのがおかしいってのは変だね。
症状からすると、(わざわざ)pure perl のコードを選択したときのバグっぽいけど
これって fix されたんじゃなかったっけか?
それにPerl本体が 5.8なら Encodeを利用する形でJcodeは入るはずだしなあ。
0212nobodyさん
2007/10/02(火) 06:25:36ID:SbhRpQr+テストするのに良い方法はないでしょうか?
0213nobodyさん
2007/10/02(火) 07:23:13ID:???0215nobodyさん
2007/10/02(火) 09:25:29ID:???実際に use して調べるのが一番確実。
#!/usr/bin/perl -w
use strict qw(subs vars);
my $token = qr/[A-Z_a-z][0-9A-Z_a-z]*/;
my $module = ($ARGV[0] || '') =~ /^($token(?:::$token)*)\z/ ? $1 : '';
my $result = $module ? eval "use $module" : 'usage: http://.../this.cgi?Module::Name';
$result ||= $@ || qq/$module ${"${module}::VERSION"}/;
print "Content-Type: text/plain\n\n$result";
__END__
0216nobodyさん
2007/10/02(火) 09:39:01ID:???0218nobodyさん
2007/10/02(火) 17:33:08ID:???0219nobodyさん
2007/10/02(火) 19:19:35ID:???http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlport.pod#PLATFORMS
0220nobodyさん
2007/10/02(火) 20:12:26ID:???コードまで書いていただいてありがとうございました。
use <モジュール名> をevalして戻り値を確かめるわけですね。
どうもevalは使うのに躊躇してしまうんですが、こういうときは便利ですね。
>>213
@INCの中を覗くという発想も考えたことがなかったので
やってみたいと思います。
0221nobodyさん
2007/10/02(火) 21:03:46ID:2QBdgnfpコードをEUCで書いて、出力をShift_JISで行うのが目的です。
今はjcode.pl使っています。
activeperlのwinxp用でローカルチェックをしています。
JCODEというモジュールもあるそうですが、activeperlには初期状態でなかったりしますよね。
確か自分は入れた覚えもあるのですが。
オススメは何ですか?
確か他にも変換用のモジュール?はあったと思いますが。
euc,shift_jis,jisの3つだけでのオススメが知りたいです。
0222nobodyさん
2007/10/02(火) 21:47:16ID:???万能解は無いので、Encode / Jcode / jcode.pl / Unicode::Japanese を
一通り使い込んでから、好みと用途に合ったものをお選びなさいな。
0223nobodyさん
2007/10/02(火) 23:24:50ID:???0224221
2007/10/02(火) 23:41:50ID:2QBdgnfp汎用的って言っても、サーバーやローカル環境で一番広く使えるものです。
一番広まってるモジュールといえばいいのですかね。
0225nobodyさん
2007/10/03(水) 00:23:34ID:???(1,2,3,4,5)
これを配列にいれずにってことです。
grepとかでもリストが作られますよね。
そういうときにわざわざ配列に入れてから要素数を知るのが面倒です。
scalar(@{[grep{$_>0}]})
っていうのも同じくなんかなぁと思います。
普通にないなら関数作ろうと思うのですが。
0226nobodyさん
2007/10/03(水) 00:41:53ID:???0227nobodyさん
2007/10/03(水) 00:41:53ID:???0228nobodyさん
2007/10/03(水) 01:16:44ID:???手っ取り早く調べる方法ってなにかな?
0229nobodyさん
2007/10/03(水) 01:49:55ID:???インスコしてなかったら自分で読み込むようにすればいいよ。
use libつかうなり同階層に置いてuseするなり。
0230nobodyさん
2007/10/03(水) 01:58:30ID:???Perl 5.8.x なら標準モジュールの Encode が一番広まっていると言えば
広まっている。
>>225
リストコンストラクタが幾つの要素を吐くかは、吐かせてみないと
分からない。吐かせた結果を保存しないのなら、目の前を流れていく
個数を数えるしかない。
sub count { scalar @_ } $num = count((1) x rand 10);
$num = scalar @{[ (1) x rand 10 ]};
$num = 0; ++$num for (1) x rand 10;
>>228
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlport.pod#FUNCTION_IMPLEMENTATIONS
に目を通した上で eval 内で実際に使用して確認。
0231225
2007/10/04(木) 00:46:59ID:kUiVRXqk黒魔術みたいなコードはいけないってこのスレで教えてもらいました。
素人ながら納得しました。
ですからあなたもそういうコード書いていてはいけないと思います。
それも教える側でそれを使うと黒魔術が流行ってしまいます。
僕にはあなたのコードが何をしてるのかわかりません。
0232nobodyさん
2007/10/04(木) 00:52:08ID:???こんな書き方はじめてみたw
7行プログラミングとかに出てきそうだな。
だれか解説というか一般的な形にしてクレクレ
0233nobodyさん
2007/10/04(木) 00:57:28ID:???++$num;
}
0234nobodyさん
2007/10/04(木) 02:06:39ID:???0235nobodyさん
2007/10/04(木) 03:26:46ID:???↑もう何年もforeachなんて書かずにforで済ませてるからスペル調べちまったw
0236nobodyさん
2007/10/04(木) 03:33:49ID:???++$num for ((1) x rand 10);
0237nobodyさん
2007/10/04(木) 06:44:51ID:???0238225
2007/10/04(木) 07:08:27ID:kUiVRXqkこれの意味がわかりません。
1*10とどう違うんですか。
それとforに10とか与える意味も。
0..10ならわかるけど。
0239nobodyさん
2007/10/04(木) 08:10:41ID:???0241nobodyさん
2007/10/04(木) 09:03:58ID:???ひょっとして
>吐かせた結果を保存しないのなら、目の前を流れていく
>個数を数えるしかない。
の意味がわかってないのか?
お前が一定の個数で決め打ちしたいなら最初からそうすればいいだけ。
0242nobodyさん
2007/10/04(木) 09:42:16ID:???>> そういうときにわざわざ配列に入れてから要素数を知るのが面倒です。
grepに限って言えばスカラーコンテキストでは条件が真になる要素数を返すわけだが。
% perl -e 'print scalar(grep { $_ > 0 } 0,1,1,0,1)'
3
0243nobodyさん
2007/10/04(木) 09:43:48ID:???それがいまいちわからんぽ
0244nobodyさん
2007/10/04(木) 10:10:16ID:???そんなこと気にしてるとハゲるぞ。
0245nobodyさん
2007/10/04(木) 10:20:27ID:???http://perldoc.jp/docs/perl/5.8.8/perlop.pod
「Multiplicative Operators operator, multiplicative」の項
rand EXPR は 0 以上 EXPR 未満の値を返すので、整数値が欲しい際は
通常 int() を通す。但し perl が整数値を欲しがっている箇所に小数値が
与えられた場合は、自動で整数値に丸められる。
$str = substr('abcd', 0, rand 5); # '', 'a', 'ab', 'abc', 'abcd'
$var = $array[ rand @array ]; # @array 中の要素からランダム選出
x 演算子の右辺は「個数」という整数値を要求しているので、(1) x rand 5
という式は (), (1), (1,1), (1,1,1), (1,1,1,1) のいずれかになる。
>>243
>>241 が指摘してくれているように、最初から個数が分かっているなら
「リストをリストのままリストの個数を得る」必要はなく、$num = 10;
等と書いておけば済む。(1) x rand 10 という式には「要素数が不定で」
「コピペですぐ動作確認できる」リストのサンプルという以上の意味は無い。
0246nobodyさん
2007/10/04(木) 17:45:56ID:???$|++;
0247nobodyさん
2007/10/04(木) 18:42:58ID:???0248nobodyさん
2007/10/04(木) 18:43:28ID:???0249nobodyさん
2007/10/04(木) 18:44:27ID:???0250nobodyさん
2007/10/04(木) 19:48:49ID:???さっぱりわからなかったのですがどうすればいいですか?
みなさんはあそこに書いてあること、あっさりわかりました?
0251nobodyさん
2007/10/04(木) 20:48:51ID:???ラクダ本だけでは実感が掴みにくいような。
http://www.rfs.jp/sb/perl/
でも解説されてる。
同じ説明でもいろんな説明を見ると分かってくるような。
0252nobodyさん
2007/10/04(木) 21:37:38ID:???http://fleur.hio.jp/perldoc/mix/pod/perlboot.html
0253nobodyさん
2007/10/05(金) 09:42:06ID:???0254nobodyさん
2007/10/05(金) 12:41:48ID:???これは本当に超初心者向けといった感じですね。
>>252
これはわかりやすい!
>>253
こんな面白いものがあったんだ
0255nobodyさん
2007/10/06(土) 12:48:34ID:PfM+S4yJ↑フォーイーチみたいな発音でいいですよね・・・?
0256255
2007/10/06(土) 13:03:13ID:PfM+S4yJuse strict;
my %hash = qw/2 5 s 2 d 3/;
print map{"$_ " , 1}keys %hash;
>Execution of C:\test.pl aborted due to compilation errors.
これ何がいけないんですか?
print map{$_ ," ", 1}keys %hash;
こう書き換えるとエラーになりません。
activeperl5.8.1のwinxp稼動です。
0257255
2007/10/06(土) 13:23:18ID:PfM+S4yJ0259255
2007/10/06(土) 15:01:35ID:PfM+S4yJすいません。わからないです。
教えてください。
0260nobodyさん
2007/10/06(土) 15:40:28ID:???> map - An utility to map texts from and to unicode
ねーよwww
0261255
2007/10/06(土) 17:19:29ID:PfM+S4yJ0262nobodyさん
2007/10/06(土) 17:33:12ID:???0263nobodyさん
2007/10/06(土) 17:33:28ID:???スクールでも始める気か?
0264nobodyさん
2007/10/06(土) 17:44:55ID:???http://dictionary.goo.ne.jp/search.php?MT=for&kind=ej&mode=0&base=1&row=1
http://dictionary.goo.ne.jp/search.php?MT=each&kind=ej&mode=0&kwassist=0
これぐらいは辞書引いたらどうよ。
>>256
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
> { はハッシュリファレンスとブロックの両方の開始文字なので、
> map { ... は map BLOCK LIST の場合と map EXPR, LIST の場合があります。
> perl は終了文字の } を先読みしないので、{ の直後の文字を見て
> どちらとして扱うかを推測します。通常この推測は正しいですが、
> もし間違った場合は、} まで読み込んでカンマが足りない(または多い)ことが
> わかるまで、何かがおかしいことに気付きません。 } の近くで文法エラーが出ますが、
> perl を助けるために単項の + を使うというように、{ の近くの何かを変更する必要が
> あります。
perlの構文解析までは知らん。
0266255
2007/10/06(土) 19:25:29ID:PfM+S4yJありがとうございます。
それでフォーイーチでいいのですか?
用語なんで普通の読み方で本当にいいのかという意味の質問だったのですが。
mapの方ですが、
my $hash = {"A "=>"5" , "s"=>"2" , "d"=>"3"};
これでエラーが出ないんです。"A "でエラーが出ないのに、どうして
print map{"$_ " , 1}keys %hash;
でエラーが出て
print map{$_ ," ", 1}keys %hash;
でエラーが出ないのか。
よくわからないのですが、ハッシュリファレンスとしてエラーが出そうなのは後者だと思うんです。
カンマが足りないってことで。
そして前者はブロックとしても式としても何も問題がないと思うのです。
my $test = 1;
if("$test " , 1){
print "ok";
}
これを走らせてもエラーでないですし。
そこらへんどういうことなのかわかりますでしょうか?
0267255
2007/10/06(土) 19:28:03ID:PfM+S4yJ-fってなんですか?
http://perl.misty.ne.jp/switch.html
ここには載ってないですが。
0268nobodyさん
2007/10/06(土) 19:31:23ID:???>それでフォーイーチでいいのですか?
関数名の読み方に正解なんてないから好きに呼べよ。
余程狂ってなきゃ誰も笑ったりしないよ。
で、結局何が問題なんだ?
結論は既に出てるし、perlの仕様について文句言われても困る。
0269nobodyさん
2007/10/06(土) 19:32:40ID:???0271nobodyさん
2007/10/06(土) 20:42:22ID:???それはperlのオプション。
あんたが必要なのはperldocのオプションだから、
コマンドラインからperldoc perldocで確認すべし。
0272255
2007/10/06(土) 20:43:43ID:PfM+S4yJ何故エラーが出るのかわからないのです。>>266にあるとおりです。
>>264さんのところの話ではつじつまが合わないのです。
>map { ... は map BLOCK LIST の場合と map EXPR, LIST の場合があります。
どちらとして評価しても
print map{"$_ " , 1}keys %hash;
これでエラーが出る説明になりません。
0273255
2007/10/06(土) 20:47:23ID:PfM+S4yJなるほどつまり-fの意味は
perldoc -f map
で、mapの仕様を確認しろって事なんですね。
0275255
2007/10/06(土) 22:39:59ID:PfM+S4yJん・・・
map EXPR, LIST
↑これかーー!
納得です。ずっと{}の中のコンマばかりに注目してました。{}とLISTの間のコンマのあるなしが問題だたのですね。
0276nobodyさん
2007/10/06(土) 23:23:20ID:???0277nobodyさん
2007/10/06(土) 23:29:56ID:???0278nobodyさん
2007/10/07(日) 13:10:36ID:???他になんて読めるのか知りたい
0280nobodyさん
2007/10/07(日) 18:18:02ID:LZD6O2BK0281nobodyさん
2007/10/07(日) 21:49:16ID:lRWvT8wNHTTP/1.1 200 OKが返ってきて、Content-lengthもある程度あるのに、
フッタが何もないことがあるのですがどうしてでしょうか。
正常に見れるサイトもあります。
use Socket;
use FileHandle;
$host = "www.ftnet.or.jp";
$path = "/FTtuusin/index.html";
$port = 80;
$ip = inet_aton($host) || &error("host($host) not found.\n");
$SOCKADDR = pack_sockaddr_in($port, $ip);
$res = &connect($host,$path,$port);
print $res;
exit;
0282nobodyさん
2007/10/07(日) 21:51:37ID:lRWvT8wNmy ($res, $host, $path, $port);
$res = "";
$host = $_[0];
$path = $_[1];
$port = $_[2];
# ソケットの生成
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || return -1;
# ソケットの接続
connect(SOCKET, $SOCKADDR) || return -2;
autoflush SOCKET (1);
print SOCKET "GET $path HTTP/1.1\n";
print SOCKET "Referer: $url\n";
print SOCKET "Host: $host:$port\n";
print SOCKET "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\n";
print SOCKET "Connection: close\n";
print SOCKET "\n";
foreach (<SOCKET>) {
$res .= $_;
}
close SOCKET;
return $res;
}
0283nobodyさん
2007/10/07(日) 21:53:04ID:lRWvT8wNHTTP/1.1 200 OK
Date: Sun, 07 Oct 2007 11:31:44 GMT
Server: Apache/2.0.52 (CentOS)
Last-Modified: Fri, 16 Jun 2006 05:41:38 GMT
ETag: "4474a-daf-deccc880"
Accept-Ranges: bytes
Content-Length: 3503
Connection: close
Content-Type: text/html
0284nobodyさん
2007/10/07(日) 23:54:11ID:???0285281
2007/10/08(月) 00:21:06ID:???本文の部分です。htmlが書かれてる部分。
0286nobodyさん
2007/10/08(月) 02:57:53ID:???「何もない」状態を確実に再現できる例を
用意してくれないと、デバッグの手伝いはできないよ。
少なくとも手元の環境だと>>281-282のコードとサイトは
一応動くし全部取得できている。
0287nobodyさん
2007/10/08(月) 03:06:09ID:???0288nobodyさん
2007/10/08(月) 03:32:19ID:???わざわざ作るなら1.1を使う物を作ろうよ。
0289nobodyさん
2007/10/08(月) 03:33:54ID:???0290nobodyさん
2007/10/08(月) 06:54:42ID:???HTML-Parser-3.56を、cpan2rpmで.rpmにリビルドしようとしてたんですが、
make testの段でエラーになります。
(略・・・
t/unbroken-text......ok
t/unicode-bom........
# Failed test in t/unicode-bom.t at line 43.
# got: 'Parsing of undecoded UTF-8 will give garbage when decoding entities at t/unicode-bom.t line 24.
# Parsing of undecoded UTF-8 will give garbage when decoding entities at t/unicode-bom.t line 28.
# Parsing of undecoded UTF-16 at t/unicode-bom.t line 31.
# Parsing of undecoded UTF-16 at t/unicode-bom.t line 34.
# Parsing of undecoded UTF-32 at t/unicode-bom.t line 37.
# Parsing of undecoded UTF-32 at t/unicode-bom.t line 40.
・・・・(略)
t/unicode............ok
t/xml-mode...........ok
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/unicode-bom.t 1 256 2 1 50.00% 1
1 test and 1 subtest skipped.
Failed 1/48 test scripts, 97.92% okay. 1/430 subtests failed, 99.77% okay.
0291つづき
2007/10/08(月) 06:55:12ID:???perl Makefile.PL
make
make test
したときは、ビルドエラーにならず、
(略...
t/xml-mode...........ok
All tests successful, 1 test and 1 subtest skipped.
Files=48, Tests=430, 5 wallclock secs ( 3.03 cusr + 1.62 csys = 4.65 CPU)
と、ちゃんと通ります。
そこで、途中経過のspecファイルと、自前make時の出力を見比べてみると、
1:cd HTML-Parser-3.56
2:grep -rsl '^#!.*perl' . |
3:grep -v '.bak$' |
4:xargs --no-run-if-empty /usr/bin/perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'
5:/usr/bin/perl -MExtUtils::MakeMaker -e ' print qq|PREFIX=/var/tmp/perl-HTML-Parser-3.56-root/usr| if $ExtUtils::MakeMaker::VERSION =~ /5\.9[1-6]|6\.0[0-5]/ ' |
6:/usr/bin/perl Makefile.PL
と、cd HTML-Parser-3.56 から /usr/bin/perl Makefile.PLまでの間になにか挟まってます。(↑のはcpan2rpmで出来たspec)
多分、5行目は、仮インストールPREFIXを指定してるとこなので必要だとは思いますが、2,3,4行目でやってることの
意味がわかりません。
0292つづき2
2007/10/08(月) 06:56:35ID:???make testでエラーになりました。
さらに、2,3部分のみ実行すると、
./t/document.t ./t/marked-sect.t ./t/dtext.t ./t/msie-compat.t ./t/stack-realloc.t ./t/headparser.t ./t/crashme.t ./t/script.t
./t/filter-methods.t ./t/entities2.t ./t/unicode.t ./t/unicode-bom.t ./eg/hlc ./eg/hform ./eg/hstrip ./eg/htitle ./eg/htextsub
./eg/htext ./eg/hanchors ./eg/hdump ./eg/hrefsub ./mkpfunc ./mkhctype
と、こんな結果になるんですが、これをlist(@ARGV)として
perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'に渡してるんだと思うんですが、
この'MY->fixin(@ARGV)'がなにをやってるのかがわかりません。
MakeMaker.pmやそこからuse,requireしてるモジュールから'fixin'関数を探しましたが見つからず、
また、ggってみても、cpan2rpmの途中経過を報告してるページにHITするだけで、これが何を意味してるかがわかりません。
specから、この2,3,4の部分を消してrpmbuildするとちゃんとビルドが通ることは通るんですが、
なにか重大な落とし穴があるような気がして、気持ち悪いです。
0293290
2007/10/08(月) 07:22:51ID:???でも、説明の Inserts the sharpbang or equivalent magic number to a set of @files. で??
sharpbangってなんですか。
さらにUnix版のMakeMaker.pm内で検索かけても’fixin’で出てこない。
なおさら???です。
0294290
2007/10/08(月) 07:37:52ID:???sharpbangってのはどうやらファイルの頭の
#!/usr/bin/perl ってのらしいですが、ますます訳がわかりません。
一晩寝てないんでもう頭がバグってきました。
もう寝ます。
0295nobodyさん
2007/10/08(月) 11:25:25ID:???徹夜なんかする奴はばかです。
0296281
2007/10/08(月) 12:47:24ID:???>>281は余計と思われる部分を省いて、通信に関わる部分だけを書いたんですが
それを実際に自分で動かしてみたら正常に動きました。
htmlを取得したあとの文字列処理が原因だったようです。
ご迷惑おかけしました。サンクスです。
0297nobodyさん
2007/10/08(月) 15:03:02ID:???そこまで辿れてるのならソース見れば?
http://search.cpan.org/src/MSCHWERN/ExtUtils-MakeMaker-6.36/lib/ExtUtils/MM_Unix.pm
ザラっと読んだ限りでは shebang (sharpbang) 行を自分の環境に
合うものへ修正しているみたいだけど。
0298290
2007/10/08(月) 21:22:47ID:???>>297のおっしゃる通り、’MY->fixin(@ARGV)’で、292のテストスクリプト一式の先頭行が、
#!perl -w から #!/usr/bin/perl -w に書き換えられてる模様。
でその下に3行ほど、
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
ってゆうコードが追加されてます。
それ以下、use strict・・・からの実行部分は両者(自前makeとcpan2rpm)で一字一句違いなし。
(ここからはmake testでエラーの出る t/unicode-bom.tに絞って追っています)
なんで上の追加された3行が原因か?と調べてみると、ここの部分は、どうやら一部の/bin/shが頭の
#!/usr/bin/perl(sharpbang)を認識しない時用に直接shから起動させるためのコードの模様。
これが原因ではないっぽい。
う〜んと思ってスクリプトを上から順になぞっていくと、
!!!!!っ! わかったーーー!!
このスクリプトの後半部分で、is(join("",@warn), <<EOT)以下で、warningのトラップをしてるんだけど、
うえの3行が追加されたことによって、当然実行部分の行数が3行づつ下がってるんだけど、
warningトラップの各対応行がもともとのまま(つまり実際の行数-3の)部分と比較しようとして
is()がこけてmake testがエラってたんです。
>>295
いや〜〜、やっとエラーの原因つかめてすっきりしました。これで今晩はゆっくり寝れます。
0299sage
2007/10/09(火) 19:35:34ID:oM/XiNAdルーターにログインし、$telnet->cmd("show running-config")にて現在のルーターの設定を取得したいのですが、
取得した設定の中に、現在のプロンプトを示す文字列(例えば'#'など)があった場合、そこの行でデータの取得が終わりになってしまいます。
$telnet->promptコマンドにてユーザープロンプトを設定したのですが、その文字列もルーターの設定の中にあった場合、そこで設定の取得が止まってしまいます。
以下に例を書きます。
use Net::Telnet;
use strict;
my $telnet = new Net::Telnet( Timeout => 10);
#ログイン、特権モードへ
$telnet->open(host_name);
$telnet->login(user_name,password);
$telnet->print("enable");#特権モードに
$telnet->waitfor("/Pass/i");
$telnet->print(priv_password);#特権パスワード
$telnet->waitfor('/#/'); #特権プロンプトで待つ
my @show_run = $telnet->print('show running-config');
$telnet->waitfor("hogehoge");
ここのhogehogeに設定した文字列がrunning-config内にある場合、
そこでrunning-configの取得が終了してしまいます。
なにかうまい回避方法があればご教授願います。
0300nobodyさん
2007/10/09(火) 20:11:15ID:???http://search.cpan.org/~jrogers/Net-Telnet-3.03/lib/Net/Telnet.pm
@show_run = $telnet->getlines; とか
push @show_run, $line while $line = $telnet->getline(Timeout => 1); で
なんとかならんか。Net::Telnet 使ったことないし試してないけど。
0301nobodyさん
2007/10/09(火) 22:13:34ID:???0302nobodyさん
2007/10/09(火) 22:14:34ID:gGNoM/Xeって出たんですがこのエラーはなんですか?
0303nobodyさん
2007/10/10(水) 00:01:33ID:???ソースコードの3行目で
XML::RSSのロードを忘れたので
オブジェクトメソッドであるnewを
配置できなかった。
0305nobodyさん
2007/10/10(水) 15:24:05ID:???しかし、それぞれのモジュールで、use CGI としているのですが、
これにより余計な負担がかかっているということはありますか?
0306nobodyさん
2007/10/10(水) 18:20:17ID:???%INCがちゃんとしてくれるから
重複されてロードされるとかはないはず
0307nobodyさん
2007/10/11(木) 16:13:57ID:???フォルダごと削除したいのですがスクリプトでどうにかできますか?
0308nobodyさん
2007/10/11(木) 17:28:34ID:???0310nobodyさん
2007/10/11(木) 18:07:02ID:???0311nobodyさん
2007/10/11(木) 18:38:41ID:???Perlで実現可能でしょうか?
例えば「リンゴ」で検索すると自身のサイトで
---------------------------------------
・約27,900,000件
・0.01秒
・ja.wikipedia.org/wiki/リンゴ
・www.kcsnet.ne.jp/kyoei
・www.kodomo-iin.com/HL/HL220.html
・www.hasp.tv
・www.yumeringo.com
(続く
---------------------------------------
このように表示させたいのです。
もし実現可能であれば、どのような仕組みを学べば良いでしょうか。
0312nobodyさん
2007/10/11(木) 19:19:28ID:???0313nobodyさん
2007/10/11(木) 19:30:54ID:???0314nobodyさん
2007/10/12(金) 04:05:22ID:i4CjOo+Irssのバージョンが1.0の場合、以下のソースの#エラーが出るの部分で
Use of uninitialized value in concatenation (.) or string at rss line 21.
というエラーが出てしまいます。
他の<link>タグなどの場合は表示できるので
<dc:date>などの名前空間を使っているタグの場合に
上記のエラーが出てしまうみたいです。
どうすれば、名前空間のタグデータも表示できますか?
my $rss = new XML::RSS;
my $url = "http://hoge.con/rss.xml";
my $dat = get($url);
my $result = $rss->parse($dat);
foreach my $item ( @{$rss->{'items'}} ){
if($result =~ /1.0/){
print "@{$item_list}[0]->{'dc:date'}\n"; #エラーが出る
}elsif($result =~ /2.0/){
print "@{$item_list}[0]->{'pubDate'}\n";
}
}
0315nobodyさん
2007/10/12(金) 04:09:29ID:???とか。
0316314
2007/10/12(金) 04:37:32ID:???ソースがおかしかったんで張りなおします。
my $rss = new XML::RSS;
my $url = 'http://hoge.com/rss20.xml';
my $dat = get($url);
my $result = $rss->parse($dat);
foreach my $item ( @{$rss->{'items'}} ){
if($result =~ /1.0/){
print "$item->{'dc:date'}\n"; #エラーが出る
}elsif($result =~ /2.0/){
print "$item->{'pubDate'}\n";
}
}
0317314
2007/10/12(金) 04:50:59ID:???print "$item->{'dc'}->{'date'}\n";
という記述でうまくいきました。
お騒がせしました。
0318nobodyさん
2007/10/12(金) 22:46:03ID:w18ekEW+そういう仕事に就くにはやはり学校などを出てる必要があるのでしょうか?
いわゆる大卒みたいな最低条件というか。
前から一度経験してみたいなと思っていましたが、そういうアルバイトはないんでしょうか。
建設現場の日雇いみたいに気軽にやってみたいです。
本業はありますが、結構時間はあるほうなので。
この世界はどうなってるのでしょうか?
0319nobodyさん
2007/10/12(金) 22:50:35ID:???0320nobodyさん
2007/10/12(金) 22:59:11ID:???0321nobodyさん
2007/10/12(金) 23:23:59ID:w18ekEW+0322nobodyさん
2007/10/13(土) 00:20:58ID:???24時間PCの前でカタカタやるのが楽しくなきゃやってられない
0323nobodyさん
2007/10/13(土) 00:22:01ID:???0325nobodyさん
2007/10/13(土) 00:41:31ID:???0326nobodyさん
2007/10/13(土) 02:59:15ID:???年取ったら高確率で禿げそう。
0327nobodyさん
2007/10/13(土) 15:06:53ID:iKtPwiMHこの文字列を数字に変える($ = 10)
簡単な表記はありますでしょうか?
sprintf使ってみたのですが上手くいきません
0328nobodyさん
2007/10/13(土) 15:10:02ID:???もし$a= "0000010"; なら 関数int使えばいい
0329327
2007/10/13(土) 15:13:51ID:???自己解決しました
%dで
0330318
2007/10/13(土) 16:40:37ID:5Vuk1MtCしかしこういう雰囲気からすると日雇いなんかありませんよね。
ちょっと待って日雇いなんかありませんよ。
実際いきなりそれを本職とするのは厳しい。
どういう雰囲気なのか味わいたいだけと考えるとそういう会社で働いてる人脈を作るのがよさそうですね。
ここの本職の方は会社と自宅以外にどこに行きますか?
明日とかきっと休日だと思いますけど、街へ行ったりするんですか?
家族持ちだとどうしても接点を取っても仲良くはなれなさそうだから。
独身がいい。女を紹介とかすればそれなりに仲良くなれる気がするんですが。
どうですかね。女は嫌いですか?
0331nobodyさん
2007/10/13(土) 18:43:45ID:???0332318
2007/10/13(土) 19:19:29ID:5Vuk1MtCやはり頭は固いと。
0333nobodyさん
2007/10/13(土) 21:12:30ID:???だとしたらやばすぎる。
0334nobodyさん
2007/10/13(土) 21:40:38ID:???0335nobodyさん
2007/10/13(土) 21:48:34ID:???馬鹿にされ悔しさのあまり慢心で書き
出した文章がこれ
0336nobodyさん
2007/10/13(土) 21:53:08ID:fl6REYk40338336
2007/10/13(土) 22:23:53ID:???0339nobodyさん
2007/10/13(土) 22:31:44ID:???0341336
2007/10/13(土) 22:58:35ID:???とかで検索したけど出てきませんでした
0342nobodyさん
2007/10/13(土) 23:16:28ID:???perl 携帯 判定
でぐぐるな。
0343nobodyさん
2007/10/13(土) 23:43:01ID:???0345336
2007/10/13(土) 23:56:59ID:???IPアドレスより楽みたいですね。
0347336
2007/10/14(日) 00:06:15ID:???IPアドレスの方が確実ってことかな?
0348336
2007/10/14(日) 00:16:57ID:???諦めてUAで判定します。
0349nobodyさん
2007/10/14(日) 03:31:42ID:???0350nobodyさん
2007/10/14(日) 06:50:16ID:???0352nobodyさん
2007/10/14(日) 07:54:34ID:???別サーバーにあるファイルの情報を参照する方法はあるのでしょうか?
あるのでしたら方法をお教え下さいますようお願いします。
0353318
2007/10/14(日) 08:50:07ID:a8OZDemC別にバカにしてるわけでもないのに、どうしてすぐそうムキになるかね。
逆に聞きたいが、自分は頭が固くないとでも思ってるのかい?
0354nobodyさん
2007/10/14(日) 09:23:55ID:???日雇いで次の日に来るかどうか解らない奴を雇う?
スキルレベルも解らずに雇う?
つか、銭もらえるだけのスキルはあるのか?
0355318
2007/10/14(日) 12:02:37ID:a8OZDemC>日雇いで次の日に来るかどうか解らない奴を雇う?
もしかして日雇い知らない?
プログラミングに関わらずどんな仕事でも適当なやつはいらないし雇わないよ。
>スキルレベルも解らずに雇う?
どんな職業でも同じ。
君は雇う側になったことがなさそうだ。
0356nobodyさん
2007/10/14(日) 12:10:23ID:???ま、いちばん悪いのは病院に連れて行かない親なわけだが
0357nobodyさん
2007/10/14(日) 13:05:35ID:9kSbwdFLところが、特定の人だけ同時に3回記録されています
WindowsNT5.1 ブラウザが「Sleipnir」
たぶんブラウザのせいだと思いますが、
1回のアクセスでサーバに3回の動作をさせている事になります
一体どういう事なのでしょう? perlの書き方のせいでしょうか?
0358nobodyさん
2007/10/14(日) 13:19:59ID:???0360nobodyさん
2007/10/14(日) 18:22:36ID:9kSbwdFL画像付きといってもファイルをたまにアップするだけで
ほとんどの利用はテキストの書き込みと、BBSの読み込みです
会員制サイトなのでアクセスの数は少ないです
サイトの関連ログが飛ぶトラブルがあって原因の一つと思います
まず、なぜこの環境の人がアクセスすると、同時刻に3回CGIが動作して
しまうのか、その原因を知りたいです
BBSのスクリプトでは、@の配列に入れたものをforeachで展開しながら
html表示します、アクセスログはこのプロセスに入れ込んでます
0361nobodyさん
2007/10/14(日) 19:25:16ID:???なんかをしてるんじゃね?
本人に聞いたらいいよ。
0362nobodyさん
2007/10/14(日) 19:59:35ID:RGItsPbeCPANモジュールまとめサイトってないですかね?
いろいろググったけどそれらしきものがなかったので。
0363nobodyさん
2007/10/14(日) 20:01:11ID:RGItsPbe追記
日本語モジュール解説 まとめサイトです
0364nobodyさん
2007/10/14(日) 20:37:02ID:???0365nobodyさん
2007/10/14(日) 20:42:54ID:???のですがまずcgiでアクセスするにはどうすればいいでしょうか?
0366nobodyさん
2007/10/14(日) 20:49:09ID:RGItsPbeそこで全部見れるんだ。
ありがとー
結構数すくないっすね
ありがっつ
0367nobodyさん
2007/10/14(日) 22:03:04ID:5YQaKvWDuse LWP::Simple;
$buff = get("http://www.....");
print $buff;
これでとりあえずソースだけは取ってこれたのですが、テキスト(記事)の部分だけ取り出す方法がわかりません。
よろしくお願いします
0368nobodyさん
2007/10/14(日) 22:05:45ID:RGItsPbe正規表現でちょちょいのどんじゃないですかね?
一度調べてみることをおすすめします。
0369nobodyさん
2007/10/14(日) 22:15:05ID:9kSbwdFLなるほど
当方MacなのでParallelsのWinに「Sleipnir」入れてみましたが、
プラグインかなにかなんでしょうね
有り難うございました
0370nobodyさん
2007/10/15(月) 00:22:13ID:???最近はこういうのが流行みたいです
Web::Scraper
http://search.cpan.org/~miyagawa/Web-Scraper/
0372nobodyさん
2007/10/15(月) 00:44:21ID:???0373nobodyさん
2007/10/15(月) 01:06:24ID:???http://www.nicovideo.jp/watch/sm1237738
0374nobodyさん
2007/10/15(月) 03:46:48ID:???0375nobodyさん
2007/10/15(月) 05:35:56ID:???改善案を出す
パッチ送る
0376nobodyさん
2007/10/15(月) 12:15:17ID:???scrAPIは女の様な軟弱者が使う物
0377nobodyさん
2007/10/15(月) 14:20:07ID:???ニコニコ垢なんかもってないし使いたくも無い。
0378nobodyさん
2007/10/15(月) 21:15:14ID:???0379nobodyさん
2007/10/15(月) 22:05:51ID:???http://search.cpan.org/search?m=all&q=Cal&n=100
0380nobodyさん
2007/10/15(月) 23:41:31ID:???一定期間ごとにファイルに書き込むことしか思い付きません。
0382nobodyさん
2007/10/16(火) 06:05:03ID:???って何かいいことあるの?
0383nobodyさん
2007/10/16(火) 08:47:04ID:???それとも意味を聞いてるのか?
とりあえず「perl コマンドバッファリング」あたりでググれ。
0384nobodyさん
2007/10/16(火) 10:56:39ID:???ローカルではちゃんと動くのにサーバーにアップすると凍ってしまいます。
リストにある複数のブログのrss取得して最新のブログ3件の記事表示、みたいなのがやりたいんですが、
サーバーがLWPの許可してないと難しいですか?
なにかいいやり方あったらお教えください。
0385nobodyさん
2007/10/16(火) 11:11:22ID:???input.txtという名前に下のようなfpingの出力を入れ
www.yahoo.co.jp:[0], 84 bytes, 18.1 ms (18.1 avg, 0% loss)
www.yahoo.co.jp:[1], 84 bytes, 23.2 ms (20.7 avg, 0% loss)
18.1
23.2と出力したいです。
bytes,より前を切り取り、ms ( も切り取ろうとして
$fping = "./input.txt";
open(A,"$fping")|| die "Can not open file";
@b = <A>;
close (A);
foreach $c(@b){
$c = grep(/(.*?)bytes, (\d{1,4}\.\d{1,2} ms) \(/,$c);
}
foreach $c(@b){
print "$c\n";
}
というプログラムを作ったんですが、うまくいきません。
どこを直せばいいでしょうか?
0388nobodyさん
2007/10/16(火) 12:40:52ID:???出遅れた…。
perl -lne "print /(?<=bytes, )(.+?)(?= ms)/" input.txt
0389nobodyさん
2007/10/16(火) 13:22:24ID:???どこの鯖使ってるか知らんが、LWP使えないようにしてるってことは
FWでoutboundが遮断されてる可能性が高く、だとすればどうしようもない
0390nobodyさん
2007/10/17(水) 00:29:17ID:7VxwUF8E0391nobodyさん
2007/10/17(水) 00:37:06ID:???0393nobodyさん
2007/10/17(水) 08:03:38ID:BedUMdjt下のような流れのcgiで
複数のクライアントから接続された場合
変数$gHogeはクライアント毎に保たれますか?
それとも上書きされちゃいますか?
my $gHoge = ""; #クライアントからポストされた値が入る。
〜$gHogeを扱う長めの処理が続く。
0396nobodyさん
2007/10/17(水) 23:05:49ID:7VxwUF8Eわからないので要望スレに逝ってきますorz
0398nobodyさん
2007/10/18(木) 01:48:20ID:???0399バターズ
2007/10/18(木) 22:40:14ID:???ダブルコロンって言うんだよ
0400nobodyさん
2007/10/20(土) 00:37:33ID:Ja84SJeF属性は生きるってどこかに書いてありました
どういうことでしょう
ssiのhtmlファイルの中に書いた、iframeのCGIまたは#exec cgiで
クッキー認証できなかったら全画面を再認証画面に飛ばしたいのですが、
やはり無理でしょうか?
0401nobodyさん
2007/10/20(土) 05:18:19ID:VLTga6QI<a href="hoge.html">hoge</a>
EOM
と、
print "<a href=\"hoge.html\">hoge</a>\n";
ではどちらの方が実行速度が速いですか?
0402nobodyさん
2007/10/20(土) 06:50:46ID:???ほぼ同じ。
http://boobar.hp.infoseek.co.jp/bench/print.txt
0403nobodyさん
2007/10/20(土) 07:40:43ID:VLTga6QI大変参考になりました。
0404nobodyさん
2007/10/20(土) 07:47:37ID:x+Q9ulv4以下のスクリプトについて質問です。
outフォルダ内の.txtファイル全てに対して
ある作業をするというスクリプトなんですが、
ファイルオープンのところでそんなファイルはないから
開けないというエラーが出力されます。
例:hoge.txtがある場合
OPEN ./out/hoge.txt file: No such file or directory at check line 22.
どこが間違ってるか教えてください。お願いします。
OSはWindowsXPです。
my @directories_to_search = ('./out/'); #対象のフォルダ
find(\&wanted, @directories_to_search);
sub wanted{
my $filePath = $File::Find::name;
my $find = index( $filePath, ".txt" ); #.txtを対象
unless ($find >= 0) {
return 1;
}
open FH_READ, "<$filePath"
or die "OPEN $filePath file: $!";
#ある作業をする。
close FH_READ;
}
0406404
2007/10/20(土) 08:33:09ID:???え?open文のor dieのエラーメッセージが出力されているから
open文でエラーが発生していると思うんですが・・・
0407nobodyさん
2007/10/20(土) 10:42:05ID:???まさかmod_perlじゃないよな?
0409半角全角が混在する行が一定の文字数を超えたら折り返すようにしたい
2007/10/20(土) 14:21:49ID:g/E6yd0f送信するメールの本文において、半角全角が混在する行の文字数を数え、
一定の文字数(例えば半角72文字、全角36文字)を超えた行だけを
強制的に折り返したいと考えています。
どのようにするのがよいでしょうか?
lengthはバイト数を返す関数なので、
全角文字の真ん中で折り返されると困ることになると考えてます。
もしかすると、長い行はsendmail側が自動で折り返してくれたりするのでしょうか?
それとも、何かほかの関数で簡単に数えたりできるのでしょうか?
なお、カスタマイズの自由度を考えて自作しているので、
「どこそこのメールフォームを使え」というのは勘弁してください。
以上、よろしくお願いします。
0410nobodyさん
2007/10/20(土) 14:28:07ID:o1wAy6B9$@ だと、evalでのエラーの値が入る
でも、実行値は...?
お願いします。
0411nobodyさん
2007/10/20(土) 14:37:23ID:???$result = eval($hoge);
じゃダメなん?($resultに実行結果、$@にエラーメッセージ)
参考
ttp://www.tohoho-web.com/wwwperl2.htm#eval
0412nobodyさん
2007/10/20(土) 14:55:48ID:o1wAy6B9短い$hogeだと関数が成功した1しか返さないことがあるようでアレ違うわと思っていました。
>>409
ちょっと離れるので投げっぱなしになってしまいそうだけど
解答してくれる人が現れる間に考えていました
use utf8;
use Encode;
$str = '
eval ($hoge); の実行した値を変数に入れるにはどうしたらいいでしょうか?
$@ だと、evalでのエラーの値が入る
でも、実行値は...?
お願いします。
';
@stream = split(/\n/,$str); #最初に渡された文字列を 改行 を区切りとして @stream に配列として読み込んだ
map{ s{(.......)}{$1\n}g } @stream; #”8文字”単位で改行を入れてる
map{print encode(sjis,$_)}@stream; #各行を出力するときにsjisに変換してる
とか、なかんじでどうよ?
ただし1バイト文字の扱いがなんか変。
*たぶんutf8でけつまずいてるかんじ。
0414409
2007/10/20(土) 17:45:16ID:???これです。こういう機能がほしかったんです。
jcode.plにはありませんでしたが、Jcode.pmにはありました。
これまで使っていたのがjcode.plだったのでが、
MIMEヘッダの機能も強化されているようなので、Jcode.pmに乗り換えようと思います。
どうもありがとうございました。
0415nobodyさん
2007/10/20(土) 18:24:36ID:???0417nobodyさん
2007/10/20(土) 19:44:36ID:???0418nobodyさん
2007/10/20(土) 20:12:44ID:???0419nobodyさん
2007/10/23(火) 05:26:38ID:???0420nobodyさん
2007/10/23(火) 14:21:34ID:???0421nobodyさん
2007/10/23(火) 15:27:18ID:???UTF8な日本語テキストの半角カナを全角にしたいと思ってEncode::JP::H2Zを使おうと思いました。
しかし、一部の文字(〜など)がEUCに変換する段階で?に変換されてしまい、困ってしまいました。
とりあえず、コードポイントにフォールバックできることがわかったので、
以下のように書いてその場をしのぎましたが、コードポイントを検索して文字に置換するという
作業が入ってしまい(しかも無駄に複雑)、どうもしっくりきません。
もっと簡単にする方法はありますか?
$text = encode("eucjp", $text, Encode::FB_PERLQQ); # EUCに変換
Encode::JP::H2Z::h2z(\$text); # 全角変換
$text = decode("eucjp", $text);
$text =~ s/\\x\{([0-9A-Fa-f]+)\}/pack("U*", hex($1))/eg; # コードポイントを文字に
0422nobodyさん
2007/10/23(火) 17:42:25ID:???#!/usr/local/bin/perl -w
use strict;
use Encode qw(from_to);
use Encode::JP::H2Z;
my $text = 'このファイルはUTF-8で〜半角カナ混じりの文字列';
from_to($text, utf8 => 'cp932');
from_to($text, shiftjis => 'euc-jp');
Encode::JP::H2Z::h2z(\$text);
print $text;
__END__
別解。
use Unicode::Japanese qw(unijp);
print unijp($text)->h2zKana->euc;
0423421
2007/10/23(火) 20:32:44ID:???ありがとうございます。その変換法で化けなくなりました。
後学のためお聞きしますが、Encodeではutf8を直接EUCにマップできないのでしょうか。
SJISを経由するのはわかるのですが、cp932をshiftjisに読み替えるなど、
トリッキーなことをやっていますね。
機種依存文字(@など)がある場合もそうですが、utf8とEUCの変換法は
どうもよくわからないです。
機種依存文字とか、どうやってEUCに変換するんでしょうか
0424nobodyさん
2007/10/23(火) 22:43:56ID:???ttp://search.cpan.org/dist/Encode-EUCJPMS/
0425nobodyさん
2007/10/24(水) 01:04:04ID:???メールフォームを使っててブラウザとサーバの間はSSLで暗号化してます
でもサーバからsendmailで送信するメールも暗号化してないと意味ないですよね?
Perlでどうやってやってます?S/MIMEかPGPが使えるの?(´・ω・`)
0426nobodyさん
2007/10/24(水) 01:05:27ID:???0427421
2007/10/24(水) 02:01:47ID:???なるほど、ぐぐってみてわかりました。
EncodeーEUCJPMSでcp51932も使えるようになるんですね。
標準のEncodeになんで実装しないんだろ、これ。
0428nobodyさん
2007/10/24(水) 06:10:09ID:???http://search.cpan.org/search?m=all&q=PGP&n=100
http://search.cpan.org/search?m=all&q=S%2FMIME&n=100
求められる安全度、対象ユーザのITリテラシ、かけられるコスト
等を検討すると、暗号化メールの使えるシチュエーションは
かなり限られてそうだ。金融機関やNSPだと大抵郵送だな。
0429nobodyさん
2007/10/25(木) 16:41:10ID:???これの実装がうまくいきません。
例えば
tenis ball は tenis or ball に変換するけど
'tenis ball' はそのままっていうのはなんとか出来たんですが、
'tenis ball' 'base ball' のときは
'tenis ball' or 'base ball' にするのがどうしても出来ません。
orを入れたい場所もクォートに囲まれてると判断されてしまうのです。
どなたか助けてください。
0430nobodyさん
2007/10/25(木) 17:03:22ID:???my @list = (
q{tenis ball},
q{'tenis ball'},
q{'tenis ball' 'base ball'},
) ;
for my $line ( @list ){
print join ' or ',
map{ /'/ ? $_ : split /\s+/, $_ }
split /\s+(?=')/, $line ;
print qq{\n} ;
}
0431nobodyさん
2007/10/26(金) 05:03:54ID:???my @token = m/('[\w\s]*'|\w+)(?:\s+|$)/g;
print join (' or ', @token), "\n";
}
0432429
2007/10/26(金) 15:02:18ID:???すみません、できるだけワードは固定してない方がいいのですが・・・うまく動きませんでした。
>>431
おぉ、なんかうまく動きそうです。
でも、クォートの部分を除外して配列に納めたいのですが、どうしたらいいのでしょうか?
0433nobodyさん
2007/10/26(金) 23:17:20ID:???430は全角文字(スペースも含め)を半角に変換してもダメか?
それと「クォートの部分を除外」って意味が分らん。単に
クォートを削除したいだけなら、そのぐらいは自力で考えてみたら?
0434nobodyさん
2007/10/27(土) 10:01:02ID:???ってなんでeucjpの糞使用なの?
ユニコードのまま渡せて処理出来ればいいのに。
0435nobodyさん
2007/10/27(土) 11:34:06ID:???そういうことはdankogaiに直接文句つけて来い
0436nobodyさん
2007/10/27(土) 13:36:03ID:???じゃあお前さんがそういうの作れば?
0438nobodyさん
2007/10/27(土) 18:53:28ID:???「〜」の文字だけがなぜか正常に送信されないのですが、なぜでしょうか?
0439nobodyさん
2007/10/27(土) 22:19:08ID:jIrqvOa/という記述の意味を教えて下さい
空ハッシュを返すという事でしょうか?
0440nobodyさん
2007/10/27(土) 22:50:14ID:???何を以て「正常に送信されない」と判断したのか。
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5
http://euc.jp/i18n/ucsnote.ja.html
http://www.asahi-net.or.jp/~hc3j-tkg/unicode/
>>439
http://perldoc.jp/docs/perl/5.8.8/perlop.pod
> 単項演算子の "+" は、たとえ文字列に対して用いられた場合にも、
> 何もしません。関数名に続けて括弧付きの式を書く場合に、関数の
> 引数リストと解釈されないようにするために用いることができます。
0441nobodyさん
2007/10/27(土) 23:21:31ID:jIrqvOa/ありがとうございます、単項演算子についてはわかったのですが
とあるCPANモジュールのコードで
return +{} unless $data;
というコードがあったのですがこれを
return {} unless $data;
と書かずに単項演算子の+をつけるのは
何か意図があるのでしょうか
戻り値自体はどちらでも同じような気がするのですが、、
0442nobodyさん
2007/10/28(日) 00:49:00ID:???0443nobodyさん
2007/10/28(日) 04:52:46ID:???{; } :コードブロックでコンパイル
0444nobodyさん
2007/10/28(日) 08:38:20ID:???Perlで予約語プログラミング
0445nobodyさん
2007/10/28(日) 08:48:47ID:???Perl Programming: Web::Scraperモジュールの利用
↑これ何やってるの?
0446nobodyさん
2007/10/28(日) 08:54:29ID:???Perl Catalyst Programming (入門編)
↑これも何をやっているのか、
さっぱりわからんよ
0447nobodyさん
2007/10/28(日) 09:22:22ID:???0448nobodyさん
2007/10/28(日) 09:30:40ID:???この動画だけは「何をやろうとしてるか」だけは伝わるぞ
ttp://www.youtube.com/watch?v=KyLqUf4cdwc
0451nobodyさん
2007/10/29(月) 11:17:19ID:???指定した文字が何回続いたかを取得したいのですがどうしたらいいですか?
例)この場合指定した文字は1です。
$a = '1111222';
$b = '1111136';
$aは4
$bは5
よろしくお願いします。
0452nobodyさん
2007/10/29(月) 11:56:14ID:???全角はシラネ
0453nobodyさん
2007/10/29(月) 11:59:30ID:???$c= 1;
$n= length(($a=~/((?:\Q$c\E)+)/)[0])/length($c);
0454nobodyさん
2007/10/29(月) 12:31:05ID:???$a = '111111222';
$n = '1';
$count = length(($a =~ /($n+)/)[0]);
0455nobodyさん
2007/10/29(月) 13:04:18ID:???$test_str = '111234111111';
$char = '1';
こういう場合は後半気にせず、まず見つけた連続の 3 でいいの?それとも、より長い連続の 6?
「はい、6 が得られるようにしたいんです」だと上に回答を書いた皆さんが優しくキレるかも。
あと、例なんだろうけど $a や $b は地雷踏むことがあるから気をつけてね。
0456nobodyさん
2007/10/29(月) 13:25:31ID:???use warnings;
test('1111222' => 1 );
test('1111222' => 2 );
test('111122211' => 1 );
test('111122211' => 1 , 1);
test('1111136' => 1 );
sub test {printf "%s:%s:%s\n",$_[0],$_[1],_test(@_)}
sub _test {
local($a,$b);
(sort {$b<=>$a} map {length($_)} ($_[0] =~ m{($_[1]+)}g) )[ $_[2] ? -1 : 0 ];
}
0457nobodyさん
2007/10/29(月) 17:04:12ID:???print +( length ) . qq{\n} for split /[^$i]+/ ,$a ;
0458456
2007/10/29(月) 19:24:03ID:???sub _test { ( sort map length,$_[0] =~ /(${_[1]}{2,})/g )[$_[2] ? 0 : -1] }
0459nobodyさん
2007/10/30(火) 23:38:44ID:???例えば
$mode = $cgi->param('mode');
というデータを受け取って、処理の場合わけをする場合どういう書き方がエレガントなんでしょうか?
現状は
if ($mode eq 'post') { &post}
elsif ($mode eq 'edit') { &edit;}
elsif ($mode eq 'delete') { &delete}
else { &error}
こんな感じなのですが、それは初心者の書き方だって馬鹿にされました。
悔しいのでもっと効率的な方法があったら教えてください。
0460JAPU ◆lVJAPUTeX.
2007/10/30(火) 23:52:20ID:???エレガントかは分からないけど、分岐がある程度多い場合はこんな書き方だとすっきり書けるかと。
%actions = (post => \&post,
edit => \&edit,
delete => \&delete);
if(exists $actions{$mode}) {
$actions{$mode}->();
} else {
error();
}
数個程度なら if で分岐されちゃってもいいと思いますし、実際そうしています。
0461nobodyさん
2007/10/30(火) 23:58:03ID:???それでいいんじゃね?
各サブルーチンに戻り値があるなら「三項演算子」って手もあるし、
以下の様なやり方もあるけど、普通に書いてメンテ出来るものならば
バカにされても放置しとけば?
my %hash = (
post => sub { 1 } , # &post の内容を書く
edit => sub { 2 }, # &edit の内容
delete => sub { 3 }, # &delete の内容
) ;
print $hash{'edit'}->() || q{error} ; #q{error} には&error あたりを、、、
ソース全体を見たら綺麗な書き方があるかもしれんが、
それに関しては情報不足。
0462nobodyさん
2007/10/30(火) 23:59:04ID:???0463nobodyさん
2007/10/31(水) 00:10:35ID:???if文分岐も分かりやすいと思うが、へたに小細工するとますますへたっぴに見える。
0464nobodyさん
2007/10/31(水) 12:11:23ID:???使いたくない書き方No1かも。
0465nobodyさん
2007/10/31(水) 13:29:29ID:???: $expr3 ? $expr4
: $expr5 ? $expr6
: $expr7
;
書き方か頭が悪いんだろ
0466至急
2007/10/31(水) 15:17:23ID:???CGIに詳しく都内に来れる方であれば可能
一日日払い即金で払います。
詳細はメール下さい。
0467nobodyさん
2007/10/31(水) 15:47:41ID:???エレガントかしらないけどこんなパッケージ作ってる。
(不要箇所削ったのでそのまま動くか不明)
package Local::Base;
use strict;
use warnings;
our $DEBUG = 0;
sub class {ref$_[0]||$_[0]||__PACKAGE__}
sub new {(bless {} => class( shift() ))->init(@_)}
sub mode :method {shift->param('mode',@_)}
sub method_name :method {shift->{method_name}->{ shift() }}
sub default_method :method {die('不正なmodeを受け取りました')}
sub init :method {
my $self = shift;
my %param = @_;
$self->{method_name} = $param{method_name} || {};
return $self->run_method( $self->mode , @_ );
}
sub run_method :method {
my $self = shift;
my $method = $self->method_name( shift );
$method = 'default_method' unless $method && $self->can( $method );
return $self->$method(@_);
}
1;
0469nobodyさん
2007/10/31(水) 19:51:49ID:???使い方も書いたつもりだったんだけど書けてなかった。
#!/usr/bin/perl
use strict;
use warnings;
use base qw(Local::Base);
my $r = eval{
__PACKAGE__->new(
method_name => {
edit => 'edit',
post => 'post'
}
)
} || $@;
print CGI->header,$r,"\n" unless ref $r;
######################################################################
# editの動作を定義
sub edit :method {
my $self = shift;
print $self->header;
print "EDITモード";
return $self;
}
1;
0470nobodyさん
2007/10/31(水) 20:11:48ID:???この :method って何の意味だっけ
perlsub見ても載ってないや
変数にも付けれた気がしたが
0471nobodyさん
2007/10/31(水) 21:09:19ID:???perl attributes でググれば日本語のサイトも沢山出る。
変数に付けられるのは 5.8系
0472nobodyさん
2007/11/01(木) 01:06:18ID:???自分でゴチャゴチャ作るよりも。使ってる人いる?
0473nobodyさん
2007/11/01(木) 02:26:10ID:???0474nobodyさん
2007/11/01(木) 10:48:57ID:???CGI::Application もフレームワークじゃないの?
0475nobodyさん
2007/11/01(木) 17:27:41ID:???:methodは組み込みのattribute
Attribute::Handlers使うと自作のattributeも作れる。
…がいつ仕様が定まってなくて変更があるかもってどっかで読んだ気がする。
>>474
・自分しかいじらない
・少人数で知識の共有が容易
・マニュアルが整っている
のどれかなら自作のフレームワークの方が慣れてるだろうし開発効率いいんじゃないかな?
フレームワーク自体のメンテナンスが(出来る|しなきゃいけない)のはデメリットか?
既製のフレームワーク使うのは
・他の人と知識の共有しやすい
・ドキュメントがある/(第3者も使ってるので)ノウハウが検索しやすい
・フレームワーク自身のメンテナンスを(あまり)しなくていい
ってとこかな?
0477nobodyさん
2007/11/02(金) 11:22:36ID:???別名で保存するにはどうすればいいでしょうか
Perl 5.8.8なのでuse Encode;を利用する、読み取り専用で1行ずつ変換処理する
あたりまでは勉強しました。スマートな方法よろしく御教示おねがいします
0478nobodyさん
2007/11/02(金) 13:22:56ID:???データはutf-8のままのほうがよくないかな。
0481nobodyさん
2007/11/02(金) 16:43:20ID:???0482nobodyさん
2007/11/02(金) 17:17:33ID:???すげー!、シェルスクリプトですよね?
sshができない場合はこんな感じで利用すればいいのかな
system("nkf -s log.txt > log.sjis.txt");
1つ気になるのがjcode.plなど元の文字コードを指定するのがあると思うのですが、
&jcode::convert(\$_, 'sjis' ,'utf8');
nkfでは気にしなくても自動判別完璧なのでしょうか?
0483nobodyさん
2007/11/02(金) 17:34:58ID:???0484nobodyさん
2007/11/02(金) 17:51:47ID:???use Perl6::Slurp;
use Jcode;
$c = slurp "log.txt";
Jcode::convert(\$c, "sjis", "utf8");
open($fh, ">", "log.sjis.txt");
print $fh $c;
>>482
jcode, Jcode, nkfは、判別できる場合は判別してくれる。
0486nobodyさん
2007/11/05(月) 07:24:22ID:???コマンドプロンプトだとnslookup -> set type=***
UNIXならhost -t ***
でクエリタイプを設定できるんですけど、PERLの場合はどうやるのでしょうか。
0487nobodyさん
2007/11/05(月) 10:55:44ID:???http://search.cpan.org/~olaf/Net-DNS-0.61/lib/Net/DNS.pm#Find_the_nameservers_for_a_domain.
0488nobodyさん
2007/11/05(月) 11:20:15ID:6nXAnQ+nopen(FILE,">".$workFname) or die "Cannot Output File: ";
あらかじめファイルを持たせておいて、書き込み権限を与えておけば
成功しますが、新規にファイルを作成できません。
どうすればいいのでしょうか。
0489nobodyさん
2007/11/05(月) 12:21:09ID:???0491nobodyさん
2007/11/05(月) 13:19:35ID:???0492nobodyさん
2007/11/05(月) 13:22:45ID:???できれば相対パスのままで動くようにしたいです。どうすれば解決できるか分かる
方はおられませんか。まあ、あまり解決策が複雑なら、とりあえずあきらめてこの
ままにしておくつもりですが。
0493nobodyさん
2007/11/05(月) 14:36:06ID:???まず「何を」相対パスにしようとしているのかくらい書こうぜ。
あと「自分の環境」は書かなきゃ誰にも伝わらない。
0494nobodyさん
2007/11/07(水) 09:25:24ID:R3XG8Srf0496nobodyさん
2007/11/07(水) 11:46:06ID:R3XG8Srf#!perl/bin/perl
use strict;
sub kansu{
my $ref1 = shift;
my $value1;
foreach $value1($$ref1) {
print $value1 . "\n";
}
}
sub main{
my @databox1 = (13,1,6,3,9,8);
my $ref1 = \@databox1;
usort_kansu(@databox1);
}
main();
0497nobodyさん
2007/11/07(水) 11:47:42ID:???正: kansu(@databox1);
0498nobodyさん
2007/11/07(水) 12:36:16ID:???「言語的意味で」正しく挙動させるには
foreach $value1($ref1) {
(多分)あなたの望んだ挙動にするには
ソースの殆どに手を入れる必要がある。
∴ 本読んでからどうしても分らんかったら
質問し直せ
0499nobodyさん
2007/11/07(水) 14:24:36ID:???#!perl/bin/perl -w
use strict;
sub kansu {
my $ref1 = shift;
# my $value1;
foreach my $value1 (@$ref1) {
print $value1 . "\n";
}
}
sub main {
my @databox1 = (13,1,6,3,9,8);
my $ref1 = \@databox1;
kansu($ref1);
}
main();
0500nobodyさん
2007/11/07(水) 15:22:14ID:vLJSXT0R.qmailからperlスクリプトを呼び出しているのですが、その場合エラーログを取るにはどうしたらよいのでしょうか?
不正終了しているようなのですが、原因がつかめません。
0501nobodyさん
2007/11/07(水) 15:43:21ID:???if ($@) {
open(LOG, ">>/path/to/ログファイル名") or die;
print LOG "WARNING: $@";
close(LOG);
}
こういうスクリプトをqmailから呼び出せばどーよ
>499
forearch行を書き換える条件だからforearch my $value (@_){ って書いて欲しかったのかと・・
0502501
2007/11/07(水) 15:59:10ID:???こうか
0504nobodyさん
2007/11/07(水) 18:20:14ID:???ログが見えないならプログラムを置くべきではないと思う。
0506500
2007/11/07(水) 19:59:45ID:???qmailのログとはmaillogでしょうか?
スクリプトからは何もログを吐いていないんです。
sudoでapache権限で実行してるからログ吐かないのかな。
0507nobodyさん
2007/11/07(水) 20:05:11ID:???0510500
2007/11/07(水) 22:29:30ID:???いえ。
.qmail内でperlのみsudoしてapache権限で動かしてます。
qmailはvpopmail権限で動かしてますよ。
>>507さんでログ取れました。m(__)m
0511nobodyさん
2007/11/09(金) 15:33:58ID:???0514nobodyさん
2007/11/09(金) 17:49:37ID:???0515nobodyさん
2007/11/09(金) 18:08:33ID:???0516nobodyさん
2007/11/09(金) 18:57:53ID:???0518nobodyさん
2007/11/09(金) 19:09:09ID:8S2oyKnmuse dan;
で解決するよ。
0519nobodyさん
2007/11/09(金) 19:26:50ID:???0520nobodyさん
2007/11/09(金) 21:31:54ID:???0521nobodyさん
2007/11/09(金) 22:28:46ID:???0522nobodyさん
2007/11/09(金) 23:35:40ID:8S2oyKnm0523nobodyさん
2007/11/09(金) 23:39:07ID:???0524nobodyさん
2007/11/10(土) 10:49:28ID:Z9OcedPCさらにその圧縮ファイルを解凍するスクリプトを作りたいです。
例えば、LWP::Simpleを使った場合
my $dat = get('http://hoge.com/071110.lzh');
の後はどう処理していけばいいでしょうか?
0525nobodyさん
2007/11/10(土) 11:02:39ID:???lha 書庫を解凍する処理を行えばよい。
0526nobodyさん
2007/11/10(土) 11:03:28ID:???はい。
http://www.google.co.jp/search?q=lzh+%E8%A7%A3%E5%87%8D+perl&ie=utf-8&oe=utf-8
0527nobodyさん
2007/11/11(日) 02:16:45ID:???どうすればいいんでしょうか。
0529nobodyさん
2007/11/11(日) 14:32:10ID:4iiY3aOIurlからファイル名だけを取り出したいです。
例えば、$urlという変数に下の3つのurlがあった場合は
hoge1.html, hoge2.html, hoge3.htmlを取り出したいです。
http://localhost/hoge1/hoge1.html
http://localhost/hoge1/hoge11/hoge111/hoge2.html
http://localhost/hoge2/hoge21/hoge3.html
下のように自分でやってみたのですが、localhostの前の/から取得してしまいます。
if( $url =~ /\/(.*\.html)$/ ){
print $1 . "\n";
}
どうすればやりたい事ができますか?
教えてください、お願いします。
0530nobodyさん
2007/11/11(日) 14:35:11ID:???あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?
0531529
2007/11/11(日) 14:47:19ID:???レス有難うございます。
>ワイルドカードにすべき部分は「全ての文字」じゃない、「/を除いた全ての文字」だ。
なるほど。でも頭では理解できてもそれをコーディングするとなると・・・
.*の部分を弄ればいいのかなぁ。
>あ、とりあえず ?xxx=hoge とかの引数は考えなくていいよね?
はい、このパターンは今回ありえないっす。
0532529
2007/11/11(日) 14:58:10ID:???if( $url =~ /\/([^\/]*\.lzh)$/ ){
正規表現すげー
>>530さんアドバイスありがとうございました。
0533nobodyさん
2007/11/12(月) 08:03:25ID:???0534nobodyさん
2007/11/12(月) 16:33:29ID:XNEEDQVz最初、linuxの fileコマンドを使用していたのですが誤認識がよくあり使えません。
バイナリなのかテキストなのかだけ分かればいいのですがperlでそれを行うにはどのようにしたら良いのでしょうか?
0535nobodyさん
2007/11/12(月) 16:42:39ID:???0536nobodyさん
2007/11/12(月) 18:17:28ID:XNEEDQVz有難う御座います。
試してみましたが、EUCだったり10文字程度のcp932などの場合に誤認識するようです。
0537nobodyさん
2007/11/12(月) 18:33:52ID:???それ以外だと各文字コードの仕様を調べて
全データがそれに矛盾してないか判断するしかないと思
0538nobodyさん
2007/11/12(月) 18:39:12ID:???0539nobody
2007/11/13(火) 03:52:36ID:fKqfq45H上のサイトのようなゲームをperlで作りたいと思っています。
htmlのみでも十分なゲームだとは思いますが、あえてCGIゲームとして作りたいです。
(学校の授業の自由課題であるので・・・)
一応以下のようにhtmlは作ってみました。
<html>
省略
<body>
<h1>オーケストラ楽器別診断</h1>
<p>次の質問にお答えください♪</p>
<form action="/nussknac/cgi-bin/kadai.cgi" method="post">
<dl><dt>お名前</dt>
<dd><input type="text" name="name" value=""></dd><br>
<dt>Q1. あなたはプライドが高いほうですか?</dt>
<dd><ul>
<li><input type="radio" name="answer1" value="Yes" checked>Yes</li>
<li><input type="radio" name="answer1" value="No">No</li>
</ul></dd></dl>
<p><input type="submit" name="send1" value="送信"><br></p>
</form></body></html>
0540nobody
2007/11/13(火) 03:57:04ID:fKqfq45HHTMLのフォームから情報をCGIに送り、最初の質問に対してYesならAの質問、NoならBの質問・・・というように
答えによって質問を分岐させるように作りたいです。
if文でひたすら分岐するというイメージはありますが、どうすれば、送信ボタンを押した時に次の質問ページにリンクさせる事ができるかが分かりません。
質問ページは一つ一つ作りたいです。
よろしくお願いします。
0541nobodyさん
2007/11/13(火) 04:18:50ID:???で、htmlはともかくどこまでperl書いたのよ。まさか1行も書かずに相談しにきてるわけじゃあるまい?
0542nobodyさん
2007/11/13(火) 06:54:14ID:???0543nobodyさん
2007/11/13(火) 08:58:39ID:???色々ロジックはあると思うけど、そこら辺はどうするのかな
0544nobodyさん
2007/11/13(火) 09:17:32ID:???提出日まで1〜2週間とかなら大丈夫じゃない?
その昔、C言語の授業があって、その授業終了直後に提出したら怒られたことがあったなあ(笑)
ごめん、確かに授業聞いてませんでした。
0545nobodyさん
2007/11/13(火) 09:19:51ID:???<li><input type="radio" name="answer" value="Aの質問のURL" checked>Yes</li>
<li><input type="radio" name="answer" value="Bの質問のURL">No</li>
ってして、
print "Location: answerの値\n\n";
でリダイレクトさせていけばいいだけでは?
0546nobodyさん
2007/11/13(火) 10:36:02ID:???0547nobodyさん
2007/11/13(火) 11:10:10ID:???元の文字コードがUTF-8のときは問題なく表示できるのですが、
文字コードの判別を含めてやる場合どうやったらいいのでしょうか?
Perlのバージョンは5ですが、プロバイダ(@nifty)のサーバーのため標準モジュールを使用できません。
いきなり変換が難しいならUTF-8か否かを判別できれば、
UTF-8の場合→直デコード
UTF-8でない場合→直デコード→jcode.plで変換
でいいのかもと考えているのですが、UTF-8か否かの判別法がわかりません。
よろしくお願いします。
0548nobodyさん
2007/11/13(火) 15:19:48ID:lcS1D/Cp一応perlでは以下のように作りました。
#!/usr/local/bin/perl
use CGI;
$query = new CGI;
$q1 = $query->param('answer1');
if ($q1 eq Yes) {
open(F, ">>q2.html");
} else {
open(F, ">>q3.html");
}
でもこれだとエラーが出てしまいます。
どのように直せばいいでしょうか。
リンクのさせ方など教えて下さい。
課題提出は12月までです。
違うスレには書いていないので私ではないです。
0549nobodyさん
2007/11/13(火) 15:34:47ID:???0550nobodyさん
2007/11/13(火) 15:56:31ID:???0551nobodyさん
2007/11/13(火) 16:29:42ID:???こんな感じはどうよ。適当に書いたからちゃんと動くかどうか知らんけど。
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use FileHandle;
use File::Spec;
my $cgi = CGI->new;
my $fh = FileHandle->new;
my $html_dir = '/path/to/html/dir';
my $output = $cgi->header( -type => 'text/html' );
my $fn = q{};
if ( $cgi->param('answer1') eq 'Yes' ) {
$fn = 'q2.html';
}
else {
$fn = 'q3.html';
}
$fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<');
my $data = do { local $/; <$fh> };
$fh->close;
$output .= $data;
print $output;
0553nobodyさん
2007/11/13(火) 16:31:27ID:???誤 $fh->open( File::Spec->catfile( $html_dir, 'q2.html' ) '<');
正 $fh->open( File::Spec->catfile( $html_dir, $fn ) '<');
0554nobodyさん
2007/11/17(土) 14:33:33ID:GlJQ98hkここを見ながらコマンドプロンプトを操作しているのですが
ダウンロードされる段階まで行っても
Can't locate strict.pm in @INC (@INC contents: .) at C:\Program Files \warrick\warrick.pl line8.
BEGIN failed--compilairion aborted at C:\Program Files \warrick\warrick.pl line8.
と出ます。
意味もそもそも分からないのですが、解決方法教えてください
0555nobodyさん
2007/11/17(土) 15:24:40ID:???エラーの原因は@INCが空になってるから。なんでそうなってるのかは知らん。
ActivePerlを入れ直してみたら?
あとここはコーディングスレだからスレ違いだと思わなくもない。
0557nobodyさん
2007/11/17(土) 20:58:37ID:???どうすればいいんでしょうか。
for($i=0;$i<3;$i++)
{
$str=~s/>>[0-9]{0,10}[-]{0,1}[0-9]{0,10}/<a href="$_[1]p=$&">$&<\/a>/;
$str=~s/p=>>/p=/;
}
0558nobodyさん
2007/11/17(土) 22:00:49ID:???0561nobodyさん
2007/11/18(日) 19:50:49ID:???0562561
2007/11/18(日) 19:51:25ID:???「ですか?」が抜けた。
すまぬ
0564nobodyさん
2007/11/19(月) 06:13:08ID:s0DcKkZMいまからやるならperlは覚えたほうがいいですか?
0565nobodyさん
2007/11/19(月) 06:19:02ID:???0567nobodyさん
2007/11/20(火) 11:38:30ID:PLctc9niどこが悪いか教えてください。
#登録&多重起動禁止
use Win32::API;
use Win32::Mutex;
my $mutex = Win32::API->new("kernel32","CreateMutex",["N", "N", "P"], "N");
die "二重起動" if(Win32::Mutex->open('TestProgram123'));
$mutex=Win32::Mutex->new(1, 'TestProgram123');
#解放
my $releacemutex = Win32::API->new("kernel32","ReleaseMutex",["N"], "N");
$releacemutex->call($mutex);
0568576
2007/11/20(火) 14:43:38ID:PLctc9niWin32-API使わなくてもできるのねぇ
0569nobodyさん
2007/11/21(水) 03:27:48ID:???0570nobodyさん
2007/11/23(金) 21:52:32ID:BH2PwYj+AとBの文字があるとき、文字列の中のBAを全てABにしたいときはどのような置換をすればいいのでしょうか?
例えば、
$s = "AABABABBBA";
と文字列があったら、
$s = "AAAAABBBBB";
にしたいのです。
$s =~ s/BA/AB/g;とすると、置換後を判定してくれないので、困ってます……
0571nobodyさん
2007/11/23(金) 21:58:25ID:???たとえば。
$ perl -e '$s = "AABABABBBA";while($s=~s/BA/AB/g){}print $s;'
0572nobodyさん
2007/11/23(金) 22:00:18ID:???その場合、これ以上置換できなくなるまで「$s =~ s/BA/AB/g;」の処理を行わなければならない。すなわち、ループである。
s/BA/AB/g;は、置換を行った回数を返す。つまり、0を返すまで処理を継続したいのだから、while文が使える。
したがって、次のようになる。
while($s =~ s/BA/AB/g;){}
whileのあとの{}の中に何も入っていないが、これでお望みどおり動くようである。
print join "", sort split "", "AABBABABBBABAABBAABABABABA";
0575nobodyさん
2007/11/24(土) 07:56:01ID:???遅レス。
他の文字が存在しないと云う条件下なら、素直に文字数カウントするって手もある
perl -le 'my $s = "atataaattttatatat" ; print "a" x ( $s =~ s/a/a/g ) . "t" x ( $s =~ s/t/t/g ) ;'
ま、他の文字が存在してても外側ループ一個つけるだけだけどね。
蛇足だと思ったんだが、、、、
0576nobodyさん
2007/11/25(日) 15:53:28ID:???手作りで掲示板みたいなのを作ってるんですけど
Location:で二重投稿を禁止したくて書いたんですが投稿したあとにLocation:って文字が表示されて飛ばないんですけど
なんでしょうか?
普通なら飛ぶのに飛びません・・・。
誰か分かる方が居れば教えてください。
0579nobodyさん
2007/11/25(日) 17:55:01ID:???こっちはエスパーじゃないんだからさw
0580nobodyさん
2007/11/25(日) 18:30:55ID:???http://www.uploda.org/uporg1129660.txt
これなんですが上手く動作しなくて・・・。
0581nobodyさん
2007/11/25(日) 18:47:07ID:???print "Content-type: text/html\n\n"; # データ形式
を書いてるのが不味いような気がするのは気のせいかな。
0583nobodyさん
2007/11/25(日) 18:50:17ID:???0584nobodyさん
2007/11/25(日) 18:55:24ID:???0585nobodyさん
2007/11/25(日) 18:55:39ID:???# リロード
if ($location) {
if ($ENV{'PERLXS'} eq "PerlIS") {
print "HTTP/1.0 302 Temporary Redirection\r\n";
print "Content-type: text/html\n";
}
print "Location: $location?\n\n";
exit;
}
これがサブルーチンのwriteの最後に置いてました。
0586nobodyさん
2007/11/25(日) 18:56:09ID:???・Location: はHTTPヘッダに出力する
・ヘッダとボディの区切りは空行で示す
0587nobodyさん
2007/11/25(日) 19:08:15ID:???2バイトも勿体無いと思う。
0588nobodyさん
2007/11/25(日) 19:10:08ID:???難しそうですが頑張ってみます。
0589nobodyさん
2007/11/25(日) 21:12:48ID:???0590nobodyさん
2007/11/25(日) 21:13:37ID:???0591nobodyさん
2007/11/25(日) 21:51:10ID:???0592nobodyさん
2007/11/25(日) 21:57:24ID:???0593nobodyさん
2007/11/26(月) 01:21:50ID:???0594nobodyさん
2007/11/26(月) 09:34:29ID:???CGIでHTMLを吐く前提なら、 , を入力されると面倒なことになるんだよな。
< > なら < > ってできてしまうからいいんだけど。
0595nobodyさん
2007/11/26(月) 09:35:03ID:???< > なら < > ってできてしまうからいいんだけど。
0596nobodyさん
2007/11/26(月) 17:00:07ID:???0597nobodyさん
2007/11/26(月) 19:49:54ID:???今ソフトバンククリエイティブのCGI/perl ハンドブック第3版
のCGIサンプルで掲示板を作ったのですが掲示板にメッセージが書き込まれなかったらエラーを出そうと
思って四苦八苦しているんですがperl6はよく分からなく苦戦しています。
誰かこの本を持っていて、分かる方がいればご教授お願いします。
0599nobodyさん
2007/11/26(月) 21:19:36ID:???LWPで、現在取得しているURLの情報を参照する方法ってあるでしょうか。
ttp://www.xxx.ne.jp
というURLを取得したときに、いくつかリダイレクトされて、
ttp://www.xxx.ne.jp/cgi-bin/test.cgi?id=aaaa&pass=bbbb
こんな感じのURLになってるのですが、この ? 以降の情報を取得したいのです。
$responoser->base
では、 ? より前のURLしか返してくれません。
教えてください。
0601nobodyさん
2007/11/27(火) 03:23:29ID:???他のサーバー上のテキストファイルを読み込ませたいのですがopen関数ではできないんでしょうか?
0602nobodyさん
2007/11/27(火) 03:33:26ID:???0604nobodyさん
2007/11/27(火) 06:16:45ID:???0605nobodyさん
2007/11/27(火) 07:36:33ID:???0606nobodyさん
2007/11/27(火) 08:12:36ID:???0608nobodyさん
2007/11/27(火) 11:02:47ID:???うちの環境では、3回リダイレクトを経て、?&引数がもっさりついたurlに飛ばしても、
print $response->base();
で、引数(’?’以降%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8Aとか)がついた
URLを表示できたけど・・・。
ActivePerl 5.8.8-build822(XPsp2)
LWP/5.808
0609nobodyさん
2007/11/28(水) 05:14:00ID:???どなたかご教授願えませんか?
ちなみに、用途はバーチャルな人間の日記を作りたいと思っています。
日記を出力するアルゴリズムは別に用意しますので、
それをブログの投稿画面に自動でログインして書き込むようにしたいのです。
ローカルからでも構わないのですが、
できれば安いレンタルサーバーから行えれば良いなと思ってます。
検索で『自動投稿』としたらたくさん見つかったのですが、どれもアフィリエイター用のもので、
結構値段も高いですし、記事を予め用意しないとダメなので私がしたいようには出来そうにありません。
0610609
2007/11/28(水) 05:16:24ID:onMmaiK+0611nobodyさん
2007/11/28(水) 05:24:30ID:???0612nobodyさん
2007/11/28(水) 05:26:27ID:???0613nobodyさん
2007/11/28(水) 09:39:10ID:???0614nobodyさん
2007/11/28(水) 09:48:03ID:???△▲ WebProg 初心者の質問 Part16 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1187729623/
0615nobodyさん
2007/11/28(水) 13:29:43ID:???荒らしスクリプトにするつもりじゃないなら、その日記を出力するアルゴリズムの
元ネタの場所を公開すれば信用が得られるかも。
0616nobodyさん
2007/11/29(木) 03:01:28ID:???0617609
2007/11/29(木) 18:18:55ID:fn44RAXr日記のアルゴリズムが完成したわけではありません
ただそっちは、大したものじゃないにしても何とかなりそうなんです。
一方、自動投稿の方は何から手を付けていいのかすら分からない状態でしたので質問させてもらいました
>>616
やっぱりそうですか
わかりました。何とか頑張ってみます
因みにスパム行為をするつもりは毛頭ありませんが、確かに見ようによってはそう映る可能性も否定できないですね。
あくまでも普通の人間っぽい挙動にしたいと思っているので、投稿の数も一日で多くて3通程度、少ないときは三日ぐらい更新しないような動きを考えてました。
とにかく自分で何とかしないとダメみたいですね
ご迷惑おかけ致しました
0618nobodyさん
2007/11/29(木) 18:50:54ID:???0619nobodyさん
2007/11/29(木) 18:56:46ID:???う〜む、どう考えてもやっぱりその
日記を出力するアルゴリズム
ってのが、自動投稿するスクリプトより遥かに高レベルのような気がするが・・・・。
まあいいや、ヒントだけ。
WWW::Mechanize オススメ。
内容や使い方は、自分で調べてちょ。
0620609
2007/11/30(金) 00:45:15ID:???ありがとうございました。
参考にさせていただきます。
今いろいろ資料を調べたり、さっき図書館で借りてきた
Webクライアントプログラミングって言う本(めちゃふるいですがw)
を読んだりしてます。
HTTP通信などは一度もやったことがないので、
LWPあたりから勉強したほうがよさそうな、
そんな気がしてる今日この頃。
AtomとかXML-RPCとかの資料にまではたどり着けたのですが、
そこに平然と書かれている GETだのPOSTだのという表現についていけない状況です。
あれを全部 perl のコードに解釈するための知識がないのです。
というわけで、だいぶ時間掛かりそうですが、
こつこつやっていこうかなと。
もう少し進歩して、またわからないことがあったら、
ここか>>614さんが教えてくれたスレにでも出没いたします。
では、ごきげんよう皆様。
0621609
2007/11/30(金) 03:34:24ID:???なんだか、嬉しくて涙が出てきた 。・+゜(つД`)゜+・。
みんなありがと
0622609
2007/11/30(金) 03:51:57ID:???XML-RPCとかAtomPubなどとはまったく違うんですね。
なんというか、禁断の・・・いや、貴重な情報ありがとうございました。
0623nobodyさん
2007/11/30(金) 12:46:37ID:???$str = '$mystr';
$kigou ='@!"#$%&\'()=-^\\|{}:;+*?_/<>';
require 'jcode.pl';
if ($FORM{'namae'} ne ''){
$mystr = $FORM{'namae'};
&hankaku;
}
sub hankaku{
&Jcode'convert(*str,'euc');
if($str =~ /^[0-9]{7,11}$/){
&jcode'tr(*str,'0-9A-Za-z','0-9A-Za-z');
}elsif ($str =~ /\x8E/) {
&jcode'h2z_euc(*str);
}else ($str =~ /$kigou/){
&jcode'tr(*str,'@!”#$%&’()=−^¥|{}:;+*?_/<>','@!"#$%&\'()=-^\\|{}:;+*?_/<>');
}
&Jcode'convert(*str,'sjis');
$str = $value;
exit 0;
}
1度eucに変換してからと考えたんですが。
0625nobodyさん
2007/11/30(金) 13:27:37ID:7wito75uのようなdatファイルを下記でブランチさせると、指定範囲外だと判定されてしまうようなのです。
改善するにはどこを直せば良いでしょうか・・・最後の日付部分の比較だけで判定されてる・・?
localtime(time)取得やDAT読み込みは大丈夫っぽいです。
foreach $sdat(@set){
next, if $sdat eq "\n";
@sdat = split(/,/,$sdat);
@ddat = split(/\-/,$sdat[0]);
@d1dat = split(/\//,$ddat[0]);
@d2dat = split(/\//,$ddat[1]);
@tdat = split(/\-/,$sdat[1]);
if(
($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[0] eq '*' || $d2dat[0] >= $year))
&&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[1] eq '*' || $d2dat[1] >= $mon))
&&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[2] eq '*' || $d2dat[2] >= $mday))
&&($d1dat[0] eq '*' || ($ddat[1] ne '' && $d1dat[0] <= $year) || ($ddat[1] eq '' && $d1dat[0] == $year))
&&($d1dat[1] eq '*' || ($ddat[1] ne '' && $d1dat[1] <= $mon) || ($ddat[1] eq '' && $d1dat[1] == $mon))
&&($d1dat[2] eq '*' || ($ddat[1] ne '' && $d1dat[2] <= $mday) || ($ddat[1] eq '' && $d1dat[2] == $mday))
&&($sdat[1] eq '*' || ($tdat[0] <= $hour && $hour <= $tdat[1]))
){
chomp $sdat;
$url = $sdat[2];
last;
}
}
0626nobodyさん
2007/11/30(金) 13:32:25ID:???0627nobodyさん
2007/11/30(金) 15:56:59ID:7wito75u0628nobodyさん
2007/12/10(月) 07:32:09ID:aPvXjzqK現在、複数のプロセスから、同じデータにアクセス(読み書き)したいと考えています。
異なるプロセス間で共有される静的な変数、というようなイメージです。
外部ファイルやデータベースなどを経由する方法以外で、
このような処理を実現するにはどのようにすればよいか、ご存知の方がいましたらお願いします。
やはりmod_perlが適当でしょうか。
0629nobodyさん
2007/12/10(月) 11:08:15ID:???ていうかそれプロセスが落ちたらデータは消えていいってこと?
素直にファイルなりDBなり使えばいいとおもうんだけど、それができない理由は?
0630nobodyさん
2007/12/10(月) 11:47:45ID:???mmapやmemcacheみたいなの?
0631nobodyさん
2007/12/10(月) 13:16:59ID:???スレッド使うMPM+mod_perlで:shared使うとか
shared memory使うとかそういう話かな?
質問の仕方が初心者臭いし素直にDB使っとけって気がする。
0632628
2007/12/10(月) 20:47:52ID:???ありがとうございます。遅くなってすみません。
ご想像通り初心者です。初めて触ったのは何年も前ですが、仕事とか全然関係ないので。
Perl ←―→ 外部ファイル、DB
↑
ここのコストが凄く重いので、可能な限りアクセスを減らしたいと考えています。
Perl側で保持しておけば多少は減るかなあと。
要は、「キャッシュ」のようなものだと思っていただければ。
>629
>プロセスが落ちたら
はい、構いません。もう一度、データ本体から取得するだけなので。
>631
>読み書きするのに静的
「静的変数」と「定数」は全くの別物という認識だったのですが、
もしかするとPerlの世界だと違うのかもしれません。少し調べてきます。
>630-631
>mmap、memcache、shared
軽く調べてみただけですが、そういうことです。勘違いしてるかもしれませんが。
この辺のキーワードを参考に、深く見てみようと思います。
0633nobodyさん
2007/12/12(水) 13:49:47ID:uWSb2hJm複数画像ファイルが入っている特定フォルダから更新日が一番最新のファイルを
探して表示させたいのですが出来ますでしょうか?
尚、ファイル形式は不定です。
教えてください。
宜しくお願いします。
0634nobodyさん
2007/12/12(水) 13:58:00ID:???0635nobodyさん
2007/12/12(水) 16:11:40ID:???aaa.htmというファイルを読み込んで、その中に書かれている変数を変数展開したいと思ったのですがそう簡単にはいきませんでした。
print qq|$_|;
とすれば変数展開されるかなと思いましたがそれもだめ。
置換を使えば簡単なのですが、置換以外の方法がありましたら教えてください。
--------aaa.htmの内容--------
<html>
<body>
$a
</body>
</html>
--------ソース--------
$a = 'aaa';
open(IN, "< aaa.htm");
@html = <IN>;
close(IN);
print "Content-type: text/html; charset=Shift_JIS\n\n";
foreach (@html)
{
print $_;
}
0636nobodyさん
2007/12/12(水) 16:27:53ID:???0637635
2007/12/12(水) 16:52:55ID:???>636さんレスありがとう
0638nobodyさん
2007/12/12(水) 17:26:25ID:BkwLyerT「」などの漢字が化けてしまうのですが、
これを化けないように工夫するにはどうすればいいのでしょうか?
0641628=632
2007/12/13(木) 20:33:46ID:???色々と検討してみた結果、速度や安全性に疑問も多いですが、とりあえずshm○○を使ってみようかなと思います。
ありがとうございました。
0642nobodyさん
2007/12/14(金) 03:20:01ID:jWEjvsMQUsteramで録画したflvをダウンロードしたくて、
http://unknownplace.org/memo/2007/10/03を参考に以下のソースを実行しました。
#!/usr/bin/env perl
use strict;
use warnings;
use AMF::Perl;
use LWP::UserAgent;
my $cid = shift || '5Fq8cQp9eHsEEknbQ22OOZniqS2xUiuz';
my $amf = AMF::Perl::Util::Object->new;
$amf->addBody('client.watch_video', '/1', { cid => $cid });
my $outputstream = AMF::Perl::IO::OutputStream->new;
my $serializer = AMF::Perl::IO::Serializer->new($outputstream, 'utf-8');
$serializer->serialize($amf);
my $amfdata = $outputstream->flush;
$amfdata =~ s/\xff\xff\xff\xff/\0\0\0\x31\x0a\0\0\0\x01/;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new( POST => 'http://gw.ustream.tv/gateway.php' );
$req->content( $output );
$req->content_type('application/x-amf');
$req->content_length( length $amfdata );
my $res = $ua->request($req);
my $deserializer = AMF::Perl::IO::Deserializer->new(AMF::Perl::IO::InputStream->new($res->content), 'utf-8');
use YAML;
print Dump $deserializer->getObject->getBodyAt(0)->{value};
0643642
2007/12/14(金) 03:21:23ID:jWEjvsMQContent-Length set when there is no content, fixed at /Library/Perl/5.8.6/LWP/Protocol/http.pm line 196.
Can't use an undefined value as a HASH reference at test.pl line 37.
どうすればいいでしょうか。
よろしくお願いします。
0644nobodyさん
2007/12/14(金) 08:48:00ID:???0645nobodyさん
2007/12/15(土) 20:24:19ID:???として、処理中に何らかのテキストを入力させたいです。
英数字は問題ないのですが、日本語を入力したときが変です。
aあ
と入力して、バックスペースを押すとちゃんと消去されません。2回おせば「あ」の表示は消えるのですが、
受け取った文字のaも消えてしまっています。
解決策を教えてください
0646nobodyさん
2007/12/15(土) 22:15:15ID:???新しいIPアドレスが追加されたか定期的にチェックしてるんですか?
http://ja.wikipedia.org/wiki/%E5%88%A9%E7%94%A8%E8%80%85:Tietew/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AEIP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%83%AA%E3%82%B9%E3%83%88
0647nobodyさん
2007/12/15(土) 22:41:06ID:???@text = <STDIN>;
ってやったときに、入力を終わりにするにはどうすればいいのですか?
0648nobodyさん
2007/12/16(日) 02:59:28ID:???そこから調べてるかどうかはともかく、公式サイトを見るのは確かだな。
まあ、IPアドレスが追加されること自体はあんまり無いし……。
0650nobodyさん
2007/12/16(日) 16:00:14ID:???ホストに変換するのは失敗することあるらしいぞ。
直接IPから判断した方が確実。
気にするほどじゃないとは思うけど、どうなんだろ
0651nobodyさん
2007/12/16(日) 18:41:45ID:???0652nobodyさん
2007/12/16(日) 19:23:33ID:???0653642
2007/12/17(月) 11:34:49ID:FgX+pG+l37行目は一番最後のprintの部分です。
0654nobodyさん
2007/12/18(火) 10:34:57ID:???require('lib/lib.pl');
&dosomething();
と書いておいて、lib/lib.plに、
sub dosomething{
open(FH, '>> baka.log');
print FH time."\n";
close(FH);
}
とすると、lib/の中にファイルができるのではなく、ひとつ上にできてしまいます。
これをlib/の中に保存したいのですが、ライブラリからの相対パスで保存する方法はないでしょうか。
または絶対パスを使うしかないのでしょうか。
ヒントだけでもお願いします。
0657nobodyさん
2007/12/19(水) 01:05:36ID:???よくわからなくて試行錯誤の末下のような方法にたどり着きました
$AA{'name'} = '1234';
$BB[0]{'name'} = 'abc';
$BB[1]{'name'} = 'ああああ';
$BB[2]{'name'} = '!?';
kansuu( \%AA );
$tmp = \@BB;
kansuu( ${\$tmp->[0]} );
kansuu( ${\$tmp->[1]} );
kansuu( ${\$tmp->[2]} );
sub kansuu
{
my $h = $_[0];
print "$h->{'name'}<br>";
}
BBの要素を kansuu() に入れるために
もっとスマートな方法(っていうか正しい書式)がありましたら教えていただけないでしょうか?
0658nobodyさん
2007/12/19(水) 01:14:31ID:???my @BB = (
{name => 'abc'}, #$BB[0]に無名ハッシュ(リファレンス)をいれる
{name => 'ああああ'}, #$BB[1]に〃
{name => '!?'} #$BB[2]に〃
);
kansuu( \%AA ); #\をつけることで%AAのリファレンスがわたる
kansuu( $bb[0] ); #$bb[0]の無名ハッシュリファレンスを渡す
kansuu( $bb[1] );
kansuu( $bb[2] );
sub kansuu {
printf('%s<br>',shift->{name});#ハッシュリファレンスは->をつけて要素を取り出す
}
0659nobodyさん
2007/12/19(水) 02:00:39ID:???正直スカラーのリファレンスの説明は自身がないけどおよそあってると思う
my $scalar = 'abc'; #スカラー
my $scalar_ref = \$scalar; #スカラーのリファレンス
my $anon_scalar_ref = \do {my $anon;}; #微妙に無名じゃないけど
my @array = (1,2,3); #配列
my $array_ref = \@array; #配列のリファレンス
my $anon_array_ref = [1,2,3]; #無名配列のリファレンス
my %hash = (a=>1,b=>2,c=>3); #ハッシュ
my $hash_ref = \%hash; #ハッシュのリファレンス
my $anon_hash_ref = {a=>1,b=>2,c=>3}; #無名ハッシュのリファレンス
my $slacar_object = bless $scalar_ref => __PACKAGE__; # スカラー使ったオブジェクト
my $array_object = bless $array_ref => __PACKAGE__; # 配列使ったオブジェクト
my $hash_object = bless $hash_ref => __PACKAGE__; # ハッシュ使ったオブジェクト
#素直に取り出せる
printf "scalar=%s\n",$scalar;
printf "array=%s\n",$array[0];
printf "scalar=%s\n",$hash{a};
#アドレスっぽいのがとれる
printf "scalar_ref=%s\n",$scalar_ref;
printf "array_ref=%s\n",$array_ref;
printf "scalar_ref=%s\n",$hash_ref;
#リファレンス先の値書き換えたり取り出したり
$$scalar_ref = '書き換えちゃった';printf "scalar=%s\n",$$scalar_ref;
$array_ref->[1] = '書き換えちゃった';printf "array=%s\n",$array_ref->[1];
$hash_ref->{b} = '書き換えちゃった';printf "scalar=%s\n",$hash_ref->{b};
#デリファレンスする(copyが作られる)
my $scalar2 = ${$scalar_ref};
my @array2 = @{$array_ref};
my %hash2 = %{$hash_ref};
0660nobodyさん
2007/12/19(水) 07:53:49ID:???↓これを出力したいのですが・・・
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/cgipm.html
このページの解説によると、
use CGI;
my $q = CGI->new;
print $q->start_html(
-head=>meta({'http-equiv' => 'Content-Type'
-content=>"text/html; charset=$CharSet"}
),
このようなコードになるはずなのですが、やってみると
Undefined subroutine &main::meta called
というエラーがでます。meta()がメインのサブルーチンだと解釈されてるみたいです。
0661660 続き
2007/12/19(水) 07:54:19ID:???-head=>$q->meta({'http-equiv' => 'Content-Type'
-content=>"text/html; charset=$CharSet"}
),
とやると一応うまくいくのですが、なぜか
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
このようにもう一つ余計なメタが出てしまいます。どうすればいいのでしょうか?
CGI.pmは3..31です。
0662nobodyさん
2007/12/19(水) 10:23:45ID:???http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
my $q = CGI->new;
$q->charset('UTF-8');
0664657
2007/12/20(木) 08:31:41ID:???ありがとうございます!
超わかりやすくて助かりました
今のプログラムの色んなところがもっと簡潔に書けそうです
0665nobodyさん
2007/12/20(木) 10:28:40ID:???> 今のプログラムの色んなところがもっと簡潔に書けそうです
本当はわかってないくせに。
0667nobodyさん
2007/12/20(木) 13:39:25ID:???0668nobodyさん
2007/12/20(木) 16:21:00ID:???0669nobodyさん
2007/12/21(金) 21:13:42ID:???めんどいけど。
0670nobodyさん
2007/12/22(土) 18:50:11ID:???0671nobodyさん
2008/01/02(水) 06:47:19ID:???0672nobodyさん
2008/01/02(水) 20:07:21ID:???依存コードは書いてないけど
0673nobodyさん
2008/01/03(木) 00:16:04ID:???cygwinで5.10入れてみた
use 5.10;で書いてみてる
0674nobodyさん
2008/01/05(土) 22:21:41ID:???$test = "今日は\n いい天気です $wether";
こんな変数があるとして、$test自体は展開してほしいんですが、
中身の\nや$wetherは展開せずに出力したいのです。
0675nobodyさん
2008/01/05(土) 22:58:36ID:???ちなみに、weather?
0676nobodyさん
2008/01/06(日) 03:58:05ID:???$testに代入した時点で展開しちゃってるでそ
そもそも確認したい意図は何?
リファレンスにしてアドレスを確認する手もあるけど
0677674
2008/01/06(日) 14:08:20ID:???>>675
そうです;
>>676
なるほど・・・
意図は正規表現でゴチャゴチャいじったあとの文字列が
どうしてもめちゃくちゃくになってしまうので、変数の位置関係を調べたかったのです。
0678nobodyさん
2008/01/06(日) 16:36:10ID:???それが答えじゃないか。
>>676はそれもわかってないみたいだが。
0679nobodyさん
2008/01/06(日) 23:12:25ID:wcb81UNaprint "$kekka";
このような計算をしたら、結果が57になりました。
intって小数点が発生した時に切り落とすはずですよね?
えと、なぜこんなことになるのか意味が分からないのですが、
誰かご教授お願いします
0680nobodyさん
2008/01/07(月) 01:59:09ID:???http://www.tt.rim.or.jp/~rudyard/torii009.html
0681nobodyさん
2008/01/07(月) 11:17:24ID:???語源の知識としてはありだけど、誤用が定着するなんていくらでもあることだから。
いつもいつも空気読めない人が指摘するよな。
0682nobodyさん
2008/01/07(月) 11:27:36ID:???$kekka = int(((my $n=200 * 0.29)=~/(.*)/)[0]);
print "$kekka";
こう書けばOK
0684nobodyさん
2008/01/07(月) 11:38:36ID:???ので、その結果を書いておく。
何でこんな風な結果になるのだろうか。私も分からなかった。
$kekka = 200 * 0.29;
print "$kekka";
出力:58
$kekka = 200 * 0.29;
$kekka = int($kekka);
print "$kekka";
出力:57
$kekka = int(200 * 0.29);
print "$kekka";
出力:57
$kekka = int(2 * 29);
print "$kekka";
出力:58
0685nobodyさん
2008/01/07(月) 12:30:31ID:???use bignum; これで解決。
0686nobodyさん
2008/01/07(月) 21:15:48ID:XSyaqzwgおぉ いきました!
詳しい原因はよくわからないですが、ありがとうございました。
0687nobodyさん
2008/01/07(月) 21:22:49ID:???(* 200 0.29)
ってしてみたら57.99999999999999だってさ。機械の計算って難しいことがあるな
0688nobodyさん
2008/01/07(月) 22:41:02ID:???0689nobodyさん
2008/01/07(月) 22:44:33ID:???0690nobodyさん
2008/01/07(月) 23:59:36ID:???少なくとも俺は浮動小数点の丸め誤差については習ったことない。
あと高校の世界史も。
0692nobodyさん
2008/01/08(火) 00:31:05ID:k+nta2fcコンピュータの中で200*0.29ってどうやって計算してるか分からない
そもそも結果が57.9999・・・・になると言われても、どういう計算をしているのか
さっぱりw
0693nobodyさん
2008/01/08(火) 00:34:28ID:???(* 20 0.29)
これは5.8って表示されるから困るw
0694nobodyさん
2008/01/08(火) 00:38:53ID:???0696nobodyさん
2008/01/08(火) 08:15:35ID:???wikipediaにも載ってたね。
問題の解決には、 use bignum; つかえばいいわけで、それでいい
のは分かるけれど、それとは別の話で、小数を100倍して整数で演算をして、
あとで100で割ったりする方法だったらちゃんとでるから
use bignum; しなくてもいいんだよね?
0697nobodyさん
2008/01/08(火) 22:01:08ID:???0.29が有効数字2桁だとあらかじめ分かっているなら100倍すればいいけどなあ。
既知でないときにはuse bignum;じゃないか?
0698nobodyさん
2008/01/09(水) 00:10:32ID:???レスサンクス。
いや、意味の無い部分の考えかなと思ったんだけど、
そっちの方がメモリが少なくて済み、処理が早くなったりするのかなとか
思ったのよね。ま、すごく小さな世界をいっているんだろうけれど。
0699nobodyさん
2008/01/09(水) 01:01:57ID:???俺は細かい実行時間を気にしてミスをするより、コードの可読性を優先したいな。と思った。
大量のデータを扱う人から見ればふざけた態度かもしれないけどね。
0700nobodyさん
2008/01/09(水) 02:01:45ID:???0701nobodyさん
2008/01/09(水) 03:08:01ID:480klIK20702nobodyさん
2008/01/10(木) 23:51:33ID:???サブネットマスク形式のリストをマッチングさせたいんですが、
どんなループさせればいいですかね?
#判定ルーチン内
foreach (@list) {
my ($min,$max) = subnetMinMax($_);
return ($ip >= $min and $ip <= $max) ? 1 : 0;
}
としてるんですが、grep等を使ったほうが良いんでしょうか?
ループ内でサブルーチン呼ぶのがちょっと気になります。
0703nobodyさん
2008/01/11(金) 00:04:09ID:???x: return ($ip >= $min and $ip <= $max) ? 1 : 0;
o: return 1 if($ip >= $min and $ip <= $max);
0704nobodyさん
2008/01/11(金) 11:44:26ID:???何にマッチしたか全て取りたいならgrepだけど
有るか無いかだけでいいならループ回して見つけ次第結果返していいんじゃない?
0705nobodyさん
2008/01/11(金) 16:30:20ID:???0706nobodyさん
2008/01/11(金) 20:31:41ID:???なるほど。このままにしますありがとうございました。
>>705
そっか、そうですよね。
聞いてみて良かったです。
0707nobodyさん
2008/01/12(土) 13:10:11ID:???「うんこ」の前後は英数字・日本語交じりで文字数は不定です。
$_ =~ s/(うんこ)/$1でる/;
だと、うんこ〜出るの間の文字が文末にきてしまいます。
文末指定は$みたいなので
$_ =~ s/(うんこ)/$1でる$/;
としてperlを実行させると、エラーなのか、プログラムが終わりません。
0708nobodyさん
2008/01/12(土) 13:13:01ID:???$うんこ .= ’でる’
}
0709nobodyさん
2008/01/12(土) 13:38:43ID:???if (index($_, 'うんこ') >= 0){ $_=~ s/$/でる/; }
0710707
2008/01/12(土) 13:54:47ID:???全角を半角にしてやってみたりしましたが、エラーでした。
>>709
できました。ありがとうございます。
ただ、>=0の意味が分かりません。
改行は\nじゃないんですか?
0711nobodyさん
2008/01/12(土) 18:35:26ID:???0714nobodyさん
2008/01/13(日) 13:16:41ID:rzzkvCmjエロエロ言語だの
言うけどさ
俺が習ってきた主な4つの言語のなかじゃ
間違いなく一番習得が苦しかった
ぞ
つまり、学習コストは高い
Perlより習得が難しい言語ってあるの?
私見では達人レベルを目指すならC++が全言語のなかで一番習得困難
そこそこのプロレベルを目指すならPerlが一番困難(C++はそこそこのプロならまだ簡単)
0715nobodyさん
2008/01/13(日) 13:17:19ID:rzzkvCmj0716nobodyさん
2008/01/13(日) 21:52:12ID:???変数名のつけ方で悩んでいます。
たとえば、
my $title;
my $script_content_title;
my $ScriptContentTitle;
sub param{}
sub parse_URL_encoded_string{}
sub ParseURLEncodedString{}
等、色々書き方ありますが
短い方が良いのか、わかりやすい名前が良いのか、
又、大文字、小文字を混ぜて使うべきか、覚えやすい名前にするべきか、
意見ください。
賛否両論あると思いますが、極力万人受けするものを選びたいです。
長文すみません
0717nobodyさん
2008/01/13(日) 21:53:50ID:???0719nobodyさん
2008/01/13(日) 22:43:42ID:???0720nobodyさん
2008/01/13(日) 23:03:26ID:???かというところもあるからな。
例えば、関数名で html_ をつけるとそうでないものとの区別がついて
分かりやすくなるけれど、全部の関数に html_ がついてたら
逆に無意味に長いだけとなる。
ここでアドバイスが欲しかったら、その書こうとしているプログラムや
ソースをもう少し具体的にだすとかしないと話は進まないと思う。
0721716
2008/01/13(日) 23:22:17ID:???ありがとうございます。全部読みました。
基本的にはアンダースコアを使うべきだそうです。
スコープによって使い分けるのが良いみたいですね。
$Global_Data #グローバル
$tmp #局所
$LOCK_KIND #定数
>>720
プログラムの種類によって書き方が変わる、変えられるのがperlの利点かもしれませんね。
>全部の関数にhtml_
そういうのはパッケージにまとめればOKですかね。
おかげ様で書き方が頭に浮かんできました。ありがとうございました。
0722nobodyさん
2008/01/14(月) 02:09:11ID:???でもPerlプログラマは"傲慢"なので他人のコーディングスタイルを気にしません。
こんなイメージ。
0723nobodyさん
2008/01/14(月) 02:26:48ID:???ネーミング重要。(高橋メソッド風に)
でも職人芸的なところあるよねネーミングセンスって。
なかなかそこは難しい。
0724nobodyさん
2008/01/14(月) 04:10:53ID:???0725nobodyさん
2008/01/14(月) 04:15:16ID:???もう解決したみたいだけど、Perlベストプラクティスもおすすめ
ダミアン先生の盲信はいけないけど、かなりためになるYo
0726nobodyさん
2008/01/14(月) 17:41:01ID:???一般論としては、上を目指すならいろんなハッカーのコードや文章にたくさん触れることが必要。
これがなかなか大変だし難しい。
そのためにはネット上のコミュニティーやリアルのイベントにこまめに参加したり
ブログを定期的にチェックし続けないといけないから。
そういうことをしてない自称Perl使いが結構俺の周りにはいて、
そういう奴らは我流のあまりエレガントじゃないスタイルから抜け出せないでいる。
0727nobodyさん
2008/01/14(月) 18:57:12ID:4AKnbZN2メタ字が混ざっていることもあり、ちゃんと出力できません。
あらかじめファイルの中のメタ字に\を振って置くとしても、かなりの手間になりそうですし、
何か効率の良いメタ字対策はないでしょうか?
0728727
2008/01/14(月) 19:02:23ID:4AKnbZN2ファイルに入っている文字からの出力の際の
文字化けする文字の対策をお願いします。
0729716
2008/01/14(月) 20:00:43ID:???オライリーファンの俺には最高の本かもです。
>>727-728
余計な事してるからじゃないですかね?
quotemetaなんてのはどうですか?
文字コードなんかも書くと返事もらえるかも。
0730nobodyさん
2008/01/14(月) 20:08:53ID:???情報不足です。
「ファイルに入っている文字」…どんな文字? 文字コードは何?
「出力するつもり」…どこに出力するの?
「メタ字」…具体的にどの文字ですか?
「ちゃんと出力できません」…具体的にどのように出力できないのですか?
ありがちなのは、ファイルの中と、コンソールの文字コードの設定が異なっていて、文字化けしたように見えるとか。
メタ文字をいったん解釈してしまっているとか。
ヌル文字とかタブとか垂直タブとかグループセパレータとかasciiの制御コードはそもそも「文字」ではないですし。
「文字」をどう「出力」したいのかにもよります。
コードを示してはどうですか。
0731727
2008/01/14(月) 20:18:57ID:4AKnbZN2while($list = <IN>){
(undef,$name[$i],undef) = split(/:/, $list);
$i++;
}
@name = sort(@name);
while($line = <@name>){
print "<option value='$line'>$line</option>";
}
えーっと、コードはこのような感じです。
ファイルのDBにアクセスして、その中の一部を取り出しソートしてhtmlで出力するという形です。
0732nobodyさん
2008/01/14(月) 20:21:10ID:???0733nobodyさん
2008/01/14(月) 20:23:30ID:???html中で使われてる文字コードと出力してる変数の文字コードの不一致とか…
0735727
2008/01/14(月) 20:32:56ID:???ファイルをその後書き換えたりするとそれも出来なくなるのではないかと思っております。
0736nobodyさん
2008/01/14(月) 20:40:00ID:???0737nobodyさん
2008/01/14(月) 20:46:05ID:???use utf8;
binmode STDIN, ':encoding(shiftjis)';
binmode STDOUT, ':encoding(shiftjis)';
# windowsなら shiftjis -> cp932
↑やってみて
ソース中に日本語文字列書くならutf8で保存してね。
0738nobodyさん
2008/01/14(月) 20:54:55ID:???binmode IN, ':encoding(shiftjis)';
かな?
0739nobodyさん
2008/01/14(月) 20:57:33ID:???DBにアクセスしているのにファイルハンドルから@nameに格納しているとはいかに?
@nameへの格納の仕方が心許ないです。せめて以下のようにするとか。
my @name = map { (split(/:/))[1] } <IN>;
splitの対象が全角のコロンですが、perlソースと取り扱うデータの文字コードが合っていないと
間違いの元ですよ。
で、optionタグで書き出すべき文字列のリストが@nameに入っていて、それをどうしてグロブ
演算子を使っているのかわかりません。私はこんなこと一度もしたことありませんが…。
ここで、@nameの各要素がいったん解釈されてしまっていて、カタカナのソなどSJISの2バイト目の
\x5cが取り除かれてしまっています。単に
for (sort @name) {
print qq{<option value="$_">$_</option>\n};
}
でいいと思うのですが。
0740nobodyさん
2008/01/16(水) 00:34:21ID:???run_modesで定義されなかったrun_modeを指定するとエラーが発生させられてしまうのですが
未定義の場合デフォルトのrunmodeを起動させる方法は無いでしょうか?
0741nobodyさん
2008/01/16(水) 02:08:57ID:???AUTOLOAD => \&catch_my_exception,
);
0743nobodyさん
2008/01/16(水) 04:59:20ID:FWbaTTLj以下のような、引数が省略可能なサブルーチンがあるとします。
sub Func(;$\@\%) { (省略) }
このとき、引数が渡されたのか、それとも省略されたのかを
Func内で判断する方法を教えてください。
なお、そのままifに入れると偽となるような値(例えばスカラーの値が0)の場合も、
引数が渡されていると判断します。
0744nobodyさん
2008/01/16(水) 05:29:59ID:???引数の数から判定
sub Func(;$\@\%) { print scalar @_ }
Func(); # 0
Func(undef); # 1
Func(1, @hoge); # 2
0745nobodyさん
2008/01/16(水) 05:44:10ID:???ありがとうございます。
なるほど、サブルーチンを使う時は常に@_を意識しないとダメだってことですね。
0746nobodyさん
2008/01/16(水) 11:29:46ID:???@_ii
0747nobodyさん
2008/01/16(水) 14:19:16ID:Z4nycbhz0748nobodyさん
2008/01/16(水) 20:06:54ID:L/Qn1HzA入門書を見ながら「URLにパラメータを加える」というのをやりました。
〜〜/test.cgi?list=man
とURLにパラメーターをくっつけ、cgiで
&ReadParse( *form );
$sex = $form{ 'list' };
と受け取ったつもりだったのですが、結果をprintしてみると
manman
と2回表示されてしまいます。これは何が悪いのでしょうか?
0749nobodyさん
2008/01/16(水) 20:30:55ID:???0750748
2008/01/16(水) 20:51:36ID:???なんだか色々と間違ってたようです。
0751nobodyさん
2008/01/16(水) 22:40:40ID:QOevDgBW一般的なuriデコードのバグってどんな事ですか?
同じkeyに複数のvalがある場合の対処はしてます。
0753nobodyさん
2008/01/17(木) 12:39:49ID:???ドラゴンボールというのは、集めれば願いがかなうアイテムだ
それに対して、
ウンコは、いくらドッサリ集めてもウンコにしかならない
このように両者は一見似ているようで本質的に異なる
0755nobodyさん
2008/01/17(木) 17:15:28ID:???CGI.pm使うとmod_perl環境(Apache::RegistryやModPerl::Registry)で
-ParseHeadersやPerlSendHeader offしてあってもheaderを正しく扱えるので
CGIでもmod_perlでも動きます。ってプログラムが作りやすくなる。
0756nobodyさん
2008/01/17(木) 17:17:24ID:???バグってどういうこと?
引数には、ある程度想定されるものしか入らないはずなんだから、
$form{'hoge'} とか、引数として使う値に想定される正しい値が入っているかのチェックを行えばいいんじゃないの?
0757751
2008/01/17(木) 18:58:22ID:???区切り文字はCGI.pmでも&か:ですよね。
>>754
cgi側では解決できないような感じしますね。
>>755
それは良いコト聞いた。
>>756
オライリーの本読んでたら一般的にバグがあるとの事です。
CGI..pm使えとの一点張りです。
なので、どこにバグがあるのかなと ← いまここ
みなさんレスありがとうございます。
0760nobodyさん
2008/01/18(金) 12:04:46ID:Z4Jr4bliどこかいいサンプルないでしょうか?
アップロードしたいファイルはエクセルファイルです
0761nobodyさん
2008/01/18(金) 12:15:45ID:???0762nobodyさん
2008/01/18(金) 12:39:13ID:???それともファイルをアップロードするCGIなのか知らんけど
http://search.cpan.org/~gaas/libwww-perl-5.808/lib/HTTP/Request/Common.pm
http://search.cpan.org/~lds/CGI.pm-3.33/CGI.pm#CREATING_A_FILE_UPLOAD_FIELD
0764nobodyさん
2008/01/18(金) 14:27:48ID:???0765nobodyさん
2008/01/18(金) 15:13:46ID:???0766nobodyさん
2008/01/18(金) 16:38:38ID:???#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use CGI qw/:standard/;
use constant MAX_WAIT => 10;
my $q = new CGI;
$q->charset('utf8');
my $wait = rand(MAX_WAIT);
my @mind = qw(uploadしたい uploadしたくない uploadしてもいい);
my $mind = $mind[ int( rand(scalar @mind) ) ];
print start_html(
-head => meta({-http_equiv=>'refresh', -content=>"10; URL=$ENV{SCRIPT_NAME}"}),
-title => 'CGIの気持ち'
),$mind,end_html;
0767nobodyさん
2008/01/19(土) 01:06:12ID:???$waitは、どこで使ってるの?
-head => meta({-http_equiv=>'refresh', -content=>"$wait; URL=$ENV{SCRIPT_NAME}"}),
とかやりたかったのか?
0768nobodyさん
2008/01/19(土) 14:38:24ID:gMv3rNuv100%の確率のうち30%が当たりという設定をして
くじを引かせる場合、
my $rate = 30;
my $atari = int((rand(100))) + 1;
if($atari <= $rate){
print "あたり\n";
}
これで30%ということに理屈ではいえるのでしょうか。
それとも上か下かなので2分の1になるのでしょうか。
ご教示いただけますと幸いです。
0769nobodyさん
2008/01/19(土) 15:04:56ID:???0770nobodyさん
2008/01/19(土) 15:25:31ID:???0771nobodyさん
2008/01/19(土) 16:00:15ID:???そういうときは、そのコードを何万回か繰り返してあたりとはずれのカウントを取って、
実際に30%くらいになるかを調べればいいんですよ。
0774nobodyさん
2008/01/19(土) 21:24:36ID:???ありがとうございます。
>>773
実行有難うございます。
私の方でもやってみましたが、平均値が30%になりました。
安心しました。
0775nobodyさん
2008/01/19(土) 23:16:40ID:???use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use POSIX qw(strftime);
my $q = new CGI;
print $q->header(), $q->start_html();
#print $q->dump; # for debug
my $outputdir = "log"; # ファイルを置く先 (ディレクトリ)
my $fh = $q->param('uploaded_file');
my ($ex) = ($fh =~ m|(\.[^./\\]+)$|); # 拡張子
if ($fh ne "") {
my $timestamp = strftime "%y%m%d%H%M%S", localtime;
my $outputfn = "$outputdir/$timestamp$ex";
open(F, "> $outputfn") or die;
flock(F, 2);
if (defined $fh) {
while (<$fh>) {
print F $_;
}
}
close F;
print qq{saved as <a href="$outputfn">$outputfn</a>};
}
print $q->start_multipart_form(-name => 'myform'),
$q->filefield(-name => 'uploaded_file'),
$q->submit("OK"),
$q->endform,
$q->end_html(), "\n";
0776760
2008/01/19(土) 23:18:40ID:???日本語おかしかったですね、すいません。
サンプルを探したんですが
>>775のままだったら
ファイルをアップしたときにファイル名が
アップロードした日付になってしまいます。
ファイル名を変更することなくアップロードするにはどうすればいいでしょうか?
0777nobodyさん
2008/01/20(日) 00:14:39ID:1RDcSYMgのところを、そうじゃなくすれば良い。
0779nobodyさん
2008/01/20(日) 02:12:08ID:???0780nobodyさん
2008/01/20(日) 03:03:09ID:???同名ファイルの処理が必要になるし、文字化けとかあるし。
文字化けとかしたら、ダウソとか出来なくなる場合もあるし、
削除とかはsshログインして * とか使って消さないといけなく
なる場合もある。(解決は出来るから問題なしともいえるのだが)
日本語はファイルと一緒にコメントとして管理すべきだと思うけど、
どうかな?
0782nobodyさん
2008/01/20(日) 19:19:48ID:xw354eHRopen(OUT, ">$filename");
binmode(OUT);
while (read($fh, $buf, 1024)) { print OUT $buf; }
close(OUT);
close($fh);
上記なソースをよく見かけるんだけど、
三行目で一気に処理するんじゃなくて、
1024バイトずつ取り出して処理する理由って何?
0783nobodyさん
2008/01/20(日) 19:21:07ID:???0784775
2008/01/20(日) 19:37:21ID:???具体的にどうかえればいいのでしょうか?
教えてくださいとはいいません。
やってください
>>780
ご意見ありがとうございます。
0785nobodyさん
2008/01/20(日) 20:21:40ID:???0786nobodyさん
2008/01/20(日) 22:56:33ID:???レン鯖とかも考えた時の常識的なメモリ使用量ってどのくらい?
シュワルツ変換とか使っていいものかいつも悩む。
0787nobodyさん
2008/01/20(日) 23:26:35ID:???「レンタルサーバ メモリ使用量」でぐぐってみたらどうかな?
ま、突き詰めるとそのサービスの仕様次第となるだろう。
シュワルツ変換も「やってはいけない処理」ではなく、重たい処理
でしかないからな。それだけの質問では何もいえない。
具体的なソースを出して、この負荷は問題ないか?とかなら分かるが。
0788nobodyさん
2008/01/21(月) 21:15:32ID:29cYlZ80この場合のファイル名そのものを取得するようにするには
どのようにしたらよいですか?
0790nobodyさん
2008/01/21(月) 22:20:09ID:29cYlZ80有り難うございます
よく分かりませんが、ヒントを元にくぐってみます
0791nobodyさん
2008/01/21(月) 22:33:12ID:MggCWroJtoolkitのテンプレートを利用ユーザに編集させてたいと思っているのですが、
[% myheader = 'my/index.cgi' %]
[% INCLUDE myheader %]
などされるとソースが見えてしまいます。
なんとか規制できないでしょうか?
phpのsmartyであれば以下のように、テンプレートからのインクルードを規制することができます。
同等の機能はあるのでしょうか?
$this->security = true;
$this->security_settings["INCCLUDE_ANY"] = false;
$this->security_dir = "/path/to/templates";
$this->trustes_dir = "/path/to/php";
または、テンプレート内で使える関数を指定できるとかありますでしょうか?
日本語マニュアル見てみましたが、それらしいものがありませんでした。
http://www.hakoniwa.net/tt/
0792nobodyさん
2008/01/21(月) 23:09:44ID:???亀レスですみません。ぐぐってみました。
>782-783 のような流れをたまに見るので業界の暗黙知が
あるのかと思いましたが特に無いようですね。
会社毎に見ていくと具体的な数字を出している所は少なかったですが、
少ないところで2MBと10Mb(=1.25MB?)でした。
0793nobodyさん
2008/01/21(月) 23:29:51ID:???あるサーバで5秒くらいかかっていたのが、最新のでは1秒くらいで終わるので、
ぜんぜん問題にならなくなったとか。
でも、1分を1秒にするのはムーアの法則でも5年以上はかかるわけで、
そのくらいの規模はどう頑張っても無理だろという話だ。
0794nobodyさん
2008/01/22(火) 09:20:05ID:???INCLUDE自体を抑制するやり方はわからんが、
If a BLOCK definition is not currently visible then the template
name should be a file relative to one of the INCLUDE_PATH directo-
ries, or an absolute or relative file name if the ABSOLUTE/RELATIVE
options are appropriately enabled.
これを利用すれば普通は十分じゃねーの?
0795nobodyさん
2008/01/22(火) 10:10:27ID:???そこでチェックすりゃいいんじゃね?
0796791
2008/01/23(水) 00:37:55ID:fM6ljyqY>もし、ブロック定義が見つからない場合は、テンプレート名はINCLUDE_PATHのディレクトリにあるファイルか、ABSOLUTE/RELATIVEオプションが付いていれば絶対/相対パスにあるファイルを対象とします。
とのことですが、相対・絶対でスクリプト指定できてしまうということですよね?
考えても理解できませんでした、具体的にどのように利用すれば大丈夫なんでしょうか?
>>795
たしかにテンプレート編集時にinclude等、使わせたくない文言を削除する方法もあるのですが、
入れようとしているシステムが銀行ほどではないんですけど、絶対にユーザにソースが漏れてはいけないシステムなんです。
(今後のシステム拡張等も含んで)チェックミスが出てきやすい作りで作るのはあまり好ましくないと考えています。
html-templateでも、includeなど規制する機能はなさそうですし・・・。
使いたい機能はifとloopだけなんですけど、
perlでセキュリティ完備したテンプレートエンジンほかにあるのでしょうか?
0798nobodyさん
2008/01/23(水) 10:07:27ID:???0800nobodyさん
2008/01/23(水) 11:28:58ID:???0801nobodyさん
2008/01/23(水) 11:58:33ID:???http://anond.hatelabo.jp/20071030153111
0802nobodyさん
2008/01/23(水) 14:51:21ID:???$s = Unicode::Japanese->new;
$s->set($aaa);
$str = $s->sjis-imode;
という風に、perlで記述したところ、0という値しか返ってきません。ちなみに$aaaをそのままprintすると、文字化けします。
何がいけないのかよくわかりません。どなたかお答えいただけるとうれしいです。
0803nobodyさん
2008/01/23(水) 14:59:42ID:???$str = ($s->sjis) - 'imode';
と書いたのと同じだな。いちおうエラーにはならないが、
use strictとuse warningsを使ってればいろいろ怒られる
のではまらないですむパターンの間違いなので、なぜ
使わなかったのかよく反省しとけ。
0804nobodyさん
2008/01/23(水) 15:07:11ID:???試してみましたところ、こんどは??????という文字列が返ってきました。
いま現在、iモードシュミレータを使って表示させているのですが、これは携帯を使ってテストしないのが悪いのでしょうか?
0805nobodyさん
2008/01/23(水) 15:27:16ID:???iモードシミュレータとなるとそれはもはやPerlの話題ではないな。
適切なところへいって質問するほうがお互いのため。
その前に$strを16進ダンプ表示してみて期待したバイト列になってるか
どうかぐらいは確認しといた方がいいとは思うが。
0806791
2008/01/23(水) 21:46:29ID:fM6ljyqYいろいろな案有難うございます。
一つづつ試してみます。
どうもありがとうございました。
0807nobodyさん
2008/01/23(水) 23:17:40ID:FgvU3OwA>>775をいじってくれる
心のやさしくて暇なやつはおらんのか
サーバに日本語のファイルをUPしたいんだ
0808nobodyさん
2008/01/23(水) 23:18:24ID:???0809プログラミング歴2ヶ月
2008/01/23(水) 23:19:54ID:bNex267Nいざwebにアップロードしてみると、ディレクトリの生成をやってくれません。
この場合、原因として何が考えられるのでしょうか。
ちなみにperlのパスはあっています。
mkdirなどでググって見ても、よくわかりませんでした。。。
ヒントだけでもいいんで、どなたかよろしくお願いします。(_ _)
0812プログラミング歴2ヶ月
2008/01/24(木) 00:03:36ID:+24Wb9Puご親切にご教授いただきありがとうございます。
先ほど、パーミッションを変更したところ解決いたしまして、とても感謝しております。
しかしそれと同時に新たな問題が浮上してきまして、困っています。。。
mkdirを行った後に、とあるdatファイルに文章を出力しているのですが、
出力した後の改行コードが■になってしまいます。。。
こっちもローカルホストではうまくいっていたのに、なぜなんでしょう??
0813nobodyさん
2008/01/24(木) 00:05:46ID:???ttp://www.tohoho-web.com/wwwxx011.htm
0814nobodyさん
2008/01/24(木) 00:28:39ID:???ヒント
・UNIXではLF、WindowsではCRLF。
・\nはLR、\r\nがCRLF。
・FTPのアスキーモードで転送すると自動相互変換してくれる。
0815プログラミング歴2ヶ月
2008/01/24(木) 00:53:36ID:+24Wb9Pu解決しました。ありがとうございました!
マジに感謝してます。
0816nobodyさん
2008/01/24(木) 10:27:32ID:???例えばxyzzyみたいに、改行コードを確認したり、変更できる
テキストエディタを入れておいたほうがいいよ。
0817nobodyさん
2008/01/24(木) 10:41:34ID:???0818nobodyさん
2008/01/26(土) 19:03:18ID:???0819nobodyさん
2008/01/28(月) 12:09:42ID:fVIm37qB簡単なPerl/CGIのプログラム(掲示板など)が書ける程度のレベルです。
mod_perlの超初心者向けの解説本、ウェブサイトがあれば教えてください。
できれば日本語でお願いします。
あと、今は退社された方が書いたらしい、現在稼動中のプログラムのソースを入手したんですが、
ソースの最後に
exit;
って思いっきり書いてたりするんですが、これって大丈夫なのでしょうか?
0820nobodyさん
2008/01/28(月) 12:53:50ID:???0821nobodyさん
2008/01/28(月) 15:21:58ID:eRROoQGzこれに関して、オーバーライドを利用したコードを書いているとき、
ある関数(この場合はexit)が、どのパッケージに属しているかを調べる方法があればお願いします。
0822nobodyさん
2008/01/28(月) 16:14:02ID:Fd8GryNXたとえば、TeraTermPro with SSHの設定でcodepageというのがあります。
ほかにもありますがこれを例にとります。
ヘルプやgoogle検索で調べても引っかからないのでここでおたずねします。
locale=japanese codepage=932
だとどうもShift-jisの設定をなんらかの形でやるみたいです(付属ヘルプ)。
locale=japanese codepage=65001
だとutf-8みたいです。
それで、私のマシンはWindowsなので、codepage=932で統一しておけばいいんでしょうか。
ケースバイケースなのでしょうか。
相手マシンがFreeBSDで通信することがあるのですが、その場合は、
設定の漢字受信/送信ともutf-8でokですか??
unixだとeucとも聞きますが、最近はutf-8化したほうがいいようなことも聞きます。
ので、よくわかりません。
もちろん、ソースを何で書くかはケースバイケースなのは知っています。
分からないのは、TeraTermの設定で
漢字受信/送信 と codepage という2つのよく分からない項目がある点です。
TeraTermは有名なので当然スレがあるかと思ったらありませんでした。
それにperlプログラミングでよく登場するので、ここで質問させていただきました
0823nobodyさん
2008/01/28(月) 16:22:56ID:???実はそう言われてるけど逆で、exit(0)はダメだけどexitなら問題ない、
最近のヤツはどっちでもいい(具体的なバージョンはか書かれてない)、
色々と情報が混ざってて、調べれば調べるほど混乱してきた orz
0824nobodyさん
2008/01/28(月) 17:37:21ID:???0825nobodyさん
2008/01/28(月) 18:19:41ID:???0826nobodyさん
2008/01/28(月) 18:33:58ID:???思うように行きません。
$name =~ tr/ぁ-ん/ァ-ン/
一度、sjisやらecuやらに変換して、文字コードで置換させないと駄目でしょうか
0827nobodyさん
2008/01/28(月) 18:39:31ID:???0828nobodyさん
2008/01/28(月) 18:55:50ID:???そんなことはない。
use utf8してないとかdecodeしてなくて$nameがバイトのままとか
そういうあたりじゃねーの?
use utf8;
binmode STDOUT, ":encoding(utf8)";
foreach (ord('ぁ') .. ord('ん')) {
my $h = my $k = chr($_);
$k =~ tr/ぁ-ん/ァ-ン/;
printf "%x %s %s\n", $_, $h, $k;
}
0829nobodyさん
2008/01/28(月) 19:04:20ID:???> TeraTermは有名なので当然スレがあるかと思ったらありませんでした。
テラターム
http://pc11.2ch.net/test/read.cgi/linux/1012915309/
0831nobodyさん
2008/01/28(月) 21:13:04ID:???0832nobodyさん
2008/01/30(水) 17:37:10ID:irpAKk1Dその処理結果をファイルにしてデスクトップ上に出力したいのですが、
デスクトップまでのパスをどう取得すればいいか分かりません。
ログインユーザ毎にデスクトップのパスが変わってしまうので、
そのあたりを上手く解決できる方法があれば知りたいです。
0833nobodyさん
2008/01/30(水) 18:10:39ID:???0834nobodyさん
2008/01/30(水) 18:43:24ID:???use Win32::OLE;
my $sh = Win32::OLE->new('WScript.Shell');
print $sh->SpecialFolders("Desktop");
use strict;use warnings;
use Win32 qw/CSIDL_DESKTOP/;
print Win32::GetFolderPath( &CSIDL_DESKTOP );
0835nobodyさん
2008/01/30(水) 21:04:32ID:FClDhuIRは通るんですが、
no strict 'refs'; require "Hoge";
が通りません。Can't locateとなります。
文字列からrequireするにはどう書いたらよいでしょうか。
0836nobodyさん
2008/01/30(水) 21:12:10ID:???0837nobodyさん
2008/01/30(水) 21:17:18ID:???Hogeはあるつもりなんですが、前者と後者は同じものを指してないですか?
0838nobodyさん
2008/01/30(水) 21:29:04ID:???0839832
2008/01/30(水) 21:59:46ID:???システム環境変数とユーザー環境変数ってやつですよね。
ここにあらかじめデスクトップへのパスを設定するという事でしょうか?
>>834
ソースありがとうございます。
実際に実行してみたんですが、CGIとして実行すると
SYSTEM ユーザ名義で実行され、ログインユーザでのパスが取れませんでした。
DOS窓から実行するとバッチリなんですが…。
少し調べた所、WMIで実現できそうな気がしてきたので
そちらを当たってみようと思います。ありがとうございました。
0840nobodyさん
2008/01/30(水) 22:29:21ID:???以前は日本語の検索の時、EUCを使わなくてはいけないとかあったと
思いますが、普通にshift-jisで書いて、パターンマッチも問題なし
だったのですが、今のバージョンのPerlは文字コードとか気にしなくて
良くなりました?それともたまたま文字化けしなかっただけ?
0842nobodyさん
2008/01/30(水) 23:05:02ID:???だめっすね。
まだjcode.plとか使ってるんですかね。
実は全てunicodeで問題なくなったりしてますか?
日本語のパターンマッチで注意することとかまとめた
いいページ知ってたら教えてください。
0843nobodyさん
2008/01/30(水) 23:12:08ID:???一部の文字列を使う時だけ注意をして、POSTで受け取った文字列を
jcode.pl 使うという程度でも、Shift-JISでいけることはいける。
ttp://www.shtml.jp/mojibake/sjis_cgi.html
0844nobodyさん
2008/01/30(水) 23:19:37ID:???thxです。しばらく離れていましたが、少し思い出しました。
結局Perlはその間進化していなかったのね。
0845nobodyさん
2008/01/30(水) 23:19:46ID:???システムでも記号とか入力しようとすると駄目な場合もあるからな。
シビアに全部に対応とか考えなくても良いのではと思ったり。
0846nobodyさん
2008/01/30(水) 23:22:28ID:???Perl は 5 が出てから結構経っているはずだよ。
3 年前に触ったのも 5 じゃないかな?
そこまで大きな変化が無いからこそ、という
メリットももあるんだけどね。
次に 6 には、構文とか大きな変化があるらしいから
そっちに期待だなw
0847nobodyさん
2008/01/30(水) 23:45:06ID:???「This」にマッチしたら、
htmlの色のタグを付けて<font color>This</font>と置換する場合、
これをやると次に「This is」に色を付けたい場合マッチしなくなる
のですが、上手いやり方あります? 先に「This is」の置換を
する位しか思いつかない。
0848nobodyさん
2008/01/31(木) 01:44:59ID:???Thisにマッチしたとき、
いきなり This → <tag>This</tag> と変換するのではなく、例えば「1番目の単語にマッチした」という情報だけ保存しておく。
で、最後にまとめて置換する。
Perlの持つ強力な文字列操作が活かされないという欠点はあるが。
0849nobodyさん
2008/01/31(木) 07:23:10ID:???$out_str = '<font color="red">' . $in_str . "</font>";
ここで $str に検索対象の文章を入れる。
$str =~ s/$in_str/$out_str/g;
0850nobodyさん
2008/01/31(木) 09:05:07ID:???それ同一箇所を何度も置換する場合でも大丈夫?
0852nobodyさん
2008/01/31(木) 09:59:40ID:???<tag>This</tag> is a pen.
が$strに入ったら、次にThis isは一致しないでしょ?
0853nobodyさん
2008/01/31(木) 10:21:21ID:???その優先度はあなた次第だもの。
0854nobodyさん
2008/01/31(木) 12:45:35ID:???一括してやるなら長い方を先にすればいい
0855nobodyさん
2008/01/31(木) 13:03:27ID:???↓
<tag>This is</tag> a pen.
このあとに、「tag」というフレーズで検索する可能性は否定できない。
いや、細かくマッチ条件つければ別だろうけど。
0856nobodyさん
2008/01/31(木) 21:12:55ID:ZyBf2Z6K以下のようにやってもだめでした。
&subtest(@arr,$str,@arr2);
function () {
my (@arr,$str,@arr2) = @_;
}
0857nobodyさん
2008/01/31(木) 22:22:57ID:???(@arr,$str,@arr2)は新しい配列として扱われるので、サブルーチン側では区切りが分からん。
arrとarr2は参照を渡すとか、要素数が分かってるならサブルーチン側で@_をspliceするとかがいいかも
0858nobodyさん
2008/02/01(金) 00:10:05ID:???長い方を先にした場合、
ThisとThis isとis a penがあって、
結論は<font>This is a pen</font>に色を付けたいのだ。
848の方法かなぁ。
ただ、入力テキストが100M位、マッチする検索リストが1万個とかなので、
動かせるか・・・。
Perlよりwordマクロとかの方がいいのかなぁ。
wordなら何度重なって色付けても問題ないし・・・。
08601/2
2008/02/01(金) 03:03:29ID:???途中まで書いてまじめにやると面倒だという事は分かった。
あとは頑張ってくれ。
#!/usr/bin/perl -w
use strict;
my $str = 'This... This is, This is a pen.';
my @target = ('This', 'This is', 'is a pen');
my $tag_o = '<font color="#ffff00">';
my $tag_c = '</font>';
my $tag_r = qr|</?font[^>]*>|;
my $tag_e = qr/(?:(?!$tag_r).)*/s;
for (@target) {
my $re = join qr/(?:$tag_r)*/o, split /(\s+)/;
$str =~ s/($re)/add_tag($1)/eg;
}
print $str;
08612/2
2008/02/01(金) 03:04:31ID:???my $substr = $_[0];
if ($substr !~ /$tag_r/o) {
$substr = "$tag_o$substr$tag_c";
} elsif ($substr !~ /\Q$tag_o\E/o) {
$substr =~ s/(\Q$tag_c\E)/$1$tag_o/go;
$substr .= $tag_c;
} elsif ($substr !~ /\Q$tag_c\E/o) {
$substr =~ s/(?=\Q$tag_o\E)/$tag_c/go;
substr($substr, 0, 0) = $tag_o;
} elsif ($substr =~ /^($tag_e)\Q$tag_c\E($tag_e)\Q$tag_o\E($tag_e)\z/o) {
$substr = "$1$2$3";
} elsif ($substr =~ /^($tag_e)\Q$tag_o\E($tag_e)\Q$tag_c\E($tag_e)\z/o) {
$substr = "$tag_o$1$2$3$tag_c";
} else {
die $substr; # ココを頑張ってくれ。
}
$substr =~ s/\Q$tag_c$tag_o\E//go;
$substr;
}
0862nobodyさん
2008/02/01(金) 04:53:15ID:hS8kNEG7{
$page_dsp .= <<"EOM";
<tr>
<td colspan="2" >
<form action="????.cgi" method="post" onSubmit="return send_check()">
<select name=ku class=slc>
<option value="no">
EOM
#この中の条件式(ifの条件付オプション)は省略
{$page_dsp .= "<option value=\"1\">\n"; }
$page_dsp .= <<"EOM";
</select>
<input type=hidden name=back value="no">
<input type=hidden name=id value="$kid">
<input type=hidden name=pass value="$kpass">
<input type=hidden name=mode value="ku">
<input type=submit class=btn value="オン">
</td></form></tr>
EOM
}
else{$page_dsp .= "<tr><td colspan=2 align=center>終わり</td></tr>\n";
}
以上のように、最初の5つの条件
(各々全部の、左の数値が右の数値と同じかそれ以上の時にセレクトを非表示)
で動かしたいのですけど、5つの条件中3つの条件しか満たしてないのに非表示に
なります。
条件が5つ揃ってから非表示にするにはどうすればいいですか?
ご教授お願いします。
0863nobodyさん
2008/02/01(金) 05:30:16ID:???0865nobodyさん
2008/02/01(金) 16:52:45ID:hS8kNEG7最初の5つの命令との相性が悪かったからかもしれませんね。
省略した部分内には、最初の5つの命令を一個ずつ(計5個)指定して、条件が満たされるごとに
オプション項目が一つずつ消えていき、全部満たしたら最初の5つの命令でセレクト
ごと非表示にするつもりでいたんです。
0866nobodyさん
2008/02/01(金) 16:54:10ID:???0867nobodyさん
2008/02/01(金) 16:55:34ID:???相性が悪かったということだな
0869nobodyさん
2008/02/02(土) 05:09:34ID:???今年に入ってからいろいろと求人情報を集めてみたところperlの仕事少ないですね
噂には聞いてましたが、僕は何が何でもperlを仕事にしたいのです
まあそれはおいといて、perlを仕事としてみたときどんな感じですかね?
皆さま先輩方の多くはperlを仕事としていらっしゃると思ったので、
是非とも業務内容、他言語と比べたときの待遇、仕事のやりがいなどなど、
ポジティブな意見(勧め)もネガティブな意見(愚痴)も生の声としてお聞かせ願えればと存じます。
仕事の中でperlを使うことはたくさんの現場であるです。
おいらは今、製造業の中でperlを利用しています。
昨今の機器はLANでデータを採取できたりします。
それを高ぁーいWindows専用のアプリでデータ加工することなく、unix(含むlinux)なサーバにてcronでデータ採取・計算・加工してDB(DB_Fileで充分)に登録。(もちろんperlで)
そいつを拾ってエクセルに貼り付けるだけ(もしくはSpreadsheet::Writeで書き込むも良し)でもデータの共有が出来たりします。
記録計のようなグラフを作るにしてもGDだけで充分。
部品の計測をするのでも、今時のマイクロメータは数値をUSBで送ってくれる物があったりします。(USBテンキーみたいな出力をしたりする)
それをExcelにちまちま放り込むよりか、単純テキスト(csvでも良いけれども)で保存して、perlを使っていろんな形や計算をさせることも出来たりします。
以前勤めていたWEB屋(主にデザインやHTML書き)でも、Excelのデータを1件1HTMLファイルに変換する作業がありました。
(その求人に応募したのだ(照))
3000件近いデータを変換すると云うことで、2-3か月近い工程を組まれていたことがありました。
どうやら手動で書き換え作業をと目論んでいたようです。
けれどもデータ構造と特性を見極めるのに2日、それを変換するperlスクリプトを2日、変換作業たったの10秒って事がありました。
その当時、その部署の長は目を丸くしていましたです。
まだまだperl=CGIっていう感覚で居られたからです。
その後、ちまちまと元データ(Excel)の修正が入ってきても数秒で修正完了。
デザイン変更があってもテンプレートを書き換えるだけでおしまい。
あまった2-3か月の期間、他の仕事を色々とこなしていました。
ようは仕事に使う道具の1つとしてperlというのを持っていればどんな業種にでも使えるんじゃないかな。
そんなこともあって製造業の現場であるにもかかわらず、おいらのところにだけは使い慣れたMacOSX(iMacG5)なんてのを無理を聴いて貰って備え付けましたですです♪
0871nobodyさん
2008/02/02(土) 11:18:13ID:???高卒で十分な土方に好き好んで修士雇う経営者がいるのか?
0872nobodyさん
2008/02/02(土) 11:21:37ID:???そんなこともわからないのか?
0873nobodyさん
2008/02/02(土) 12:03:51ID:???高卒で足りる仕事には高卒の賃金しか払わないという事だよ。
0875nobodyさん
2008/02/02(土) 13:33:00ID:???0876nobodyさん
2008/02/02(土) 13:46:46ID:???個人的にはなにがなんでもPerlとかいってるPerl使いは嫌だけど
0877nobodyさん
2008/02/02(土) 14:25:02ID:???>>874
それ公務員ね。試験区分に対象の学歴があってそれに沿うことが望ましいとされてるから。
というかこれマ板のネタだろ。
0878perl好き情報3回生(本物) ◆qqt5.0NxB6
2008/02/02(土) 14:40:08ID:???僕はWebprog板に>>869と同一内容の書き込みをした者です。
>>869は偽者であって僕がマルチポストをしたのではないことを明言しておきます。
トリップをつけたので本物しか相手をしないようお願いいたします。
迷惑をおかけして申し訳ありません。
お騒がせしました。
0879nobodyさん
2008/02/02(土) 15:45:41ID:???一部の記号(それも機種依存文字含む)が文字化けします。
− → \x{ff0d}
o → \x{339c}
機種依存文字に関しては、根本的に対応することに意味があるのか疑問ですが、せめてwindowsな環境で
文字化けしないようにしたいのです。どうしたらいいでしょうか?
あんまし分かっていませんが、重要そうな部分だけ。
use XML::RSS;
use LWP::Simple;
use encoding 'euc-jp', STDOUT => 'euc-jp';
use open IN => ":encoding(euc-jp)";
use open OUT => ":encoding(euc-jp)";
binmode OUT => ":encoding(euc-jp)";
my $rss = new XML::RSS;
$rss->parsefile($site_file);
my $item_list = $rss->{'items'};
$item = ${$item_list}[0];
my $desc = $item->{'description'};
#一応対策っぽいことをやって一部の記号には対応できた
$desc =~ tr/\x{005C}\x{00A5}\x{2014}\x{203E}\x{2225}\x{FF0D}\x{FF5E}\x{FFE0}\x{FFE1}\x{FFE2}/
\x{FF3C}\x{FFE5}\x{2015}\x{FFE3}\x{2016}\x{2212}\x{301C}\x{00A2}\x{00A3}\x{00AC}/;
0880879
2008/02/02(土) 15:48:16ID:???〜 → \x{FF5E} に化ける問題は、一番下に書いた置換で解決したのですが、\x{FF0D}は何故かそのまま
文字化けしたままです…
0882879
2008/02/02(土) 15:57:31ID:???hogehoge.cgi: "\x{ff0d}" does not map to euc-jp at hogehoge.cgi line 183.
0883nobodyさん
2008/02/03(日) 01:13:34ID:???perl使ってるところはライブドアとかはてなとか高レベルに使いこなしてるところばっかり。
初〜中級のところは全部PHPになってしまった。
0884nobodyさん
2008/02/03(日) 03:35:42ID:???0885nobodyさん
2008/02/03(日) 11:14:58ID:???あとはPEARとかを使いこなせればいいわけだから、Perlの基礎がある
のなら、1週間程度で、出来るといえるんでね?
Perlで作ったコードをPHPに移植して、これ、私が作りました、みたいな。
0886nobodyさん
2008/02/03(日) 12:57:34ID:???0887質問
2008/02/03(日) 13:04:56ID:34/ZwImQ項目を選択しボタンをクリックすると、あるページには選択した項目の画像ファイルを表示し、
もうひとつのページにはその選択した項目を表示させたいのですがどうしたらよいでしょうか?
最初のページには
<form action="A.cgi" target="表示させたいページ">
を埋め込んでいるのですが、当たり前ですがこれだと"表示させたいページ"にしか表示できません。
A.cgiのなかでさらにこの部分だけは他のページへ表示させるとかできませんか?
0889nobodyさん
2008/02/03(日) 14:12:18ID:???それは、Perlの話じゃなくて、htmlの話じゃないの?
フレームタグを使って区切るか、テーブルタグを使って全部を表示させる方法がある。
板違いなので、これ以上の質問はしないように。
0890nobodyさん
2008/02/04(月) 03:22:50ID:???メッセージのとおりで、変換表に該当するものがないんでしょ。
euc-jpMSとか使わないといけないんじゃないの?
0891nobodyさん
2008/02/07(木) 12:55:00ID:???CentOS 5.1
「out of memory」のときのエラーハンドリングの方法を教えてください。
dieのときは
$::SIG{__DIE__} = sub {〜〜〜};
でいけることまではわかったのですが
「out of memory」がハンドリングできないのです。
よろしくおねがいします
0892nobodyさん
2008/02/07(木) 15:49:01ID:???それができないのなら、OSの制限上げる。メモリ積む。
0893nobodyさん
2008/02/07(木) 19:10:28ID:???my @value=(0,1,3,8); #任意のkey
my @hoge=('hoge1','hoge2','hoge3'....); #表示用配列
my $disp;
foreach (@value)
{
$disp .= ',' if $disp;
$disp .= $hoge[$_];
}
という処理をしているんですが、これってJOINでできませんか?
map使ってもこれより簡単に書けないですよね?
0894nobodyさん
2008/02/07(木) 19:28:15ID:???my @value = (0, 1, 3, 8);
my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9');
print join ',', @hoge[@value];
0896nobodyさん
2008/02/08(金) 09:47:17ID:???my $value = "0,1,3,8";
my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9');
これは
join ',',@hoge[sprit',',$value];
ですよね?
splitしてjoinして勿体無い感じ。。
0897nobodyさん
2008/02/08(金) 10:08:10ID:???0898nobodyさん
2008/02/09(土) 18:24:58ID:???0899nobodyさん
2008/02/11(月) 09:15:09ID:7AZat8M4my $endline = $. while (<FH>);
としてとりえず取得できたんですが、
その後
seek FH,0,0;
として、また1行目から別の処理したいんですがうまくできません。
seekの戻り値をprintしてみると1を返してますが、先頭には戻ってないようです。
windows環境なのが原因でしょうか?
0900nobodyさん
2008/02/11(月) 09:31:45ID:???seekしても$.はリセットされないから先頭に巻き戻したら$.= undefとかすればいい
0901nobodyさん
2008/02/11(月) 11:26:23ID:???>局所化
あ、ほんとだ。ミスってました。
undef $.;
reset $.;
それぞれ試してみましたが変化ありませんでした。
その後に
while (<FH>) {
if ($. == $bigin .. $. == $end) {
といった処理をしたいんですが、どうもうまくいきません。
0902nobodyさん
2008/02/11(月) 11:49:03ID:???ありがとうございました。
0903nobodyさん
2008/02/12(火) 21:28:15ID:???utf-8から7bitJISへの変換なのですが、(メール送信のため)
Encode.pmもJcode.pmもローマ数字をJISにしてくれません。
Encodeでは「\x{2160}」と変換不可の場合のユニコード値に変換され、
Jcodeでは「?」になります
T(ローマ数字1)
\xE2\x85\xA0 utf8 → \x1B\x24\x42\x2D\x35 JIS
と手動で変換してやれば良いのですが、escシーケンスの処理がどうしたものかと・・・
0904nobodyさん
2008/02/12(火) 23:23:01ID:???のように相対パスを使うと出来るけど
use lib '/i/cgi-bin/lib';
のように絶対パスを使うと動かなくなります
サーバーの設定によって絶対パスだと読み込めなかったりするんでしょうか
普通のリンクだと絶対パスでリンクできます
0906nobodyさん
2008/02/13(水) 02:37:13ID:???perlから使う絶対パスはwebサイト上の絶対パスじゃないよ。
・ http鯖がルートとして扱うディレクトリからの絶対パス
・ 鯖のOSの絶対パス
の違いを理解しような。
0907nobodyさん
2008/02/13(水) 02:39:50ID:???JISとかISO-2022-JPにはローマ数字はないから。
Encode::EUCJPMS - Microsoft Compatible Encodings for Japanese - search.cpan.org
http://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm
あたりをいれて、cp50220 とか cp50221 で変換する。
0908906
2008/02/13(水) 10:48:35ID:???調べてみます
0910nobodyさん
2008/02/13(水) 12:25:12ID:???ありがとうございます
Encode::EUCJPMSモジュールをいれて、
use Encode::EUCJPMS;
use Encode;
my $cp50220_str = Encode::from_to( $utf8_str , "UTF8" , "CP50220" );
で良いのでしょうか?
実はフォーム入力はShiftJISでして、CP932からutf-8に一旦エンコードしています。
これで問題はないでしょうか?
0912nobodyさん
2008/02/14(木) 10:56:12ID:AY3pAm1W#!/usr/bin/perl
use strict;
print "IEを起動します...\n";
system("C:/Program Files/Internet Explorer/iexplore.exe");
exit;
__END__
上のようにすると、IEは起動するのですが、コマンドプロンプトは残ったままで
タスクマネージャーにも perl.exetが残っています。(残るというか待ってるようですが…)
IEを起動したあとはPerlも終了して欲しくて検索したらexecというのがあったので
exec("C:/Program Files/Internet Explorer/iexplore.exe");としたら起動しませんでした。
IE起動後速やかにPerlを終了させるにはどうすれば良いでしょうか。
PerlはActivePerl 5.8.8をインストールしました。
もう一つは、my $url = 'http://www.google.co.jp/'; とした時に
IEにこの$urlを開かせるにはどうすればよいのでしょうか。よろしくお願いします。
0913nobodyさん
2008/02/14(木) 11:58:11ID:???0915nobodyさん
2008/02/14(木) 12:27:34ID:???/ ::::::::::::::::\ つ
. | ,,-‐‐ ‐‐-、 .:::| わ
| 、_(o)_,: _(o)_, :::|ぁぁ
. | ::< .::|あぁ
\ /( [三] )ヽ ::/ああ
/`ー‐--‐‐―´\ぁあ
0916910
2008/02/14(木) 12:58:24ID:???ありがとうございます。
「〜」は手動でE3 80 9Cに置き換えています。
では教えていただいた方法でやってみようと思います。
0917nobodyさん
2008/02/14(木) 15:13:40ID:???Net::SMTPについて教えて下さい
use Net::SMTP;
my $smtp = Net::SMTP->new( $mailhost );
$smtp->mail( $MailFrom );
$smtp->to( $MailTo );
$smtp->data();
$smtp->datasend( "From: $MailFrom\n" );
$smtp->datasend( "To: $MailTo\n" );
$smtp->datasend( "Subject: $e_subject\n" );
$smtp->datasend( "Mime-Version: 1.0\n" );
$smtp->datasend( "Content-type: text/plain; charset=ISO-2022-1\n" );
$smtp->datasend( "Content-transfer-encoding: 7bit\n" );
$smtp->datasend( "Reply-to: $MailFrom\n" );
$smtp->datasend( "$body\n" );
ここでbodyに例えばtestdataと入れると$bodyもメールとして届くのですが、
$bodyをtest:dataとする(半角コロンが入っている)と、$bodyが送られません
何が悪いのかご教示下さい
0918nobodyさん
2008/02/14(木) 15:18:19ID:???0919nobodyさん
2008/02/14(木) 15:28:13ID:???0921919
2008/02/14(木) 15:57:21ID:???よかったな。
バグった状態だと$bodyが送られてこないんじゃなくヘッダに入ってたはず。
メールヘッダと本文の切り分けは「半角コロンが入ってない行が登場した所から本文」って事になってるから、
どんな文が入るか分からん時は、ヘッダの最後に空行を入れれば桶。基本なんで覚えとくと便利。
0923nobodyさん
2008/02/17(日) 21:47:50ID:???ヘッダと本文は空行で分けられます。
ついでに言うと、改行は CRLF (\r\n) にすること。
MTA によっては受け付けてくれません。
0924exe
2008/02/19(火) 11:44:47ID:L1DAdjnkaAbBcCdDeE・・・yYzZ のような形です。お願いします。
0925nobodyさん
2008/02/19(火) 12:05:44ID:???0926nobodyさん
2008/02/19(火) 12:06:11ID:???を10個コピペでおk
0927exe
2008/02/19(火) 14:24:58ID:L1DAdjnk0928nobodyさん
2008/02/19(火) 14:25:28ID:???for(65..90) {
print pack("C*",$_);
print pack("C*",$_+32);
}
print "\n";
}
0929exe
2008/02/19(火) 14:42:37ID:L1DAdjnkちなみに↓の形で書くと、どうしたらよいでしょうか。
何度もすいません。
open (FILE, '>test1.txt') or die "$!";
for my $count (0..9) {
for my $i ("a".."z") {
}
print FILE "\n";
}
close(FILE);
0930nobodyさん
2008/02/19(火) 14:59:33ID:???# $countってなんぞ?
#
open (FILE, '>', 'test1.txt') or die "$!";
binmode(FILE);
for my $count (0..9) {
for my $i('a'..'z') {
print $i;
print uc($i);
}
print FILE "\n";
}
close(FILE);
0931nobodyさん
2008/02/19(火) 15:01:42ID:???# ↑はウソ
#
open (FILE, '>', 'test1.txt') or die "$!";
binmode(FILE);
for my $count (0..9) {
for my $i('a'..'z') {
print FILE $i;
print FILE uc($i);
}
print FILE "\n";
}
close(FILE);
0932exe
2008/02/19(火) 15:06:17ID:L1DAdjnk0933exe
2008/02/19(火) 15:54:07ID:L1DAdjnk自力でやらないといけないのはわかっているのですが、時間がなくて・・どなたかお願いします。
0934nobodyさん
2008/02/19(火) 16:04:55ID:???# そういうウンコみたいな仕事を漏れにも回してくれよ
#
$sent = 'dTgZtyYthSGetLt';
$sent =~ s/[a-z]//g;
print $sent;
0935nobodyさん
2008/02/19(火) 16:31:12ID:???0936exe
2008/02/19(火) 16:55:41ID:L1DAdjnk自分にとっては色々難しくて。時間もありませんでしたので・・
0937nobodyさん
2008/02/19(火) 17:15:11ID:???OPEN("http://www.aa.com/a.cgi") みたいにして
a.cgiの出力結果を元にさらに処理をしたいと思っています
0938nobodyさん
2008/02/19(火) 17:30:48ID:gLoGL0Aeいい手じゃないが、Linuxでwgetが入ってる状態で漏れが使ってる方法
$foo = `wget -O- http://www.aa.com/a.cgi`;
0939nobodyさん
2008/02/19(火) 17:45:18ID:???0940nobodyさん
2008/02/19(火) 17:55:56ID:???0942938
2008/02/19(火) 20:13:58ID:???モジュール使った方が互換性高いし、そっちの方が良いと思ったんで。
>940のLWPを使うのが最良だと思うが、使い方調べてる気分的な余裕がないんで、
wget使ってそのまま今に至る感じだ。
>941
外部コマンド実行だから。``で囲むと外部コマンドを実行して標準出力が戻ってくる。
ちなみに"perl -T"でやってると、そのままじゃ外部コマンド動かない事があるんで注意。
$ENV{'IFS'}, $ENV{'CDPATH'}, $ENV{'ENV'}, $ENV{'BASH_ENV'}, $ENV{'PATH'}を
退避・削除してから外部コマンドを実行し戻す必要がある。
0943nobodyさん
2008/02/19(火) 20:26:04ID:???0944nobodyさん
2008/02/20(水) 08:23:23ID:???http://search.cpan.org/~gaas/libwww-perl-5.808/lib/LWP/Simple.pm
0946nobodyさん
2008/02/20(水) 13:15:09ID:???そのURLのページにキーワードか書かれているかどうか調べるとき、
foreach (@url) {
LWPで取得してキーワードが見つかったら、$count++;
}
みたいにすると一つずつなので物凄く時間が掛かります。
10個くらい一気に取得する方法はないでしょうか?
0947nobodyさん
2008/02/20(水) 13:35:03ID:???0948nobodyさん
2008/02/20(水) 13:43:09ID:???0950nobodyさん
2008/02/20(水) 14:34:00ID:???0951nobodyさん
2008/02/20(水) 15:01:34ID:???プロセスBは重いサイトがリストにあって終わってないとか
無駄に待ち時間増えるから、threads使える環境ならthreadsのが楽でない?
0952nobodyさん
2008/02/20(水) 15:03:07ID:???正規表現について教えてください。
通常の2バイト文字と同様に絵文字[\x75-\x7B][\x21-\x7E]がエスケープシーケンス
\x1b\x24\x42と\x1b\x28\x42に囲まれます。
エスケープシーケンスをそれぞれ
$esc_in = "\x1b\x24\x42";
$esc_out = "\x1b\x28\x42";
とし、絵文字を
$emoji = "[\x75-\x7B][\x21-\x7E]";
とします。
元の文を
$str="今日は晴れでした■気温は10度です。";(■は笑顔の絵文字 \x79\x79 )
この$strは
$esc_in今日は晴れでした■気温は$esc_out10$esc_in度です。$esc_out
とエスケープされます。
やりたい事はこれを
$esc_in今日は晴れでした$esc_out[7979]$esc_in気温は$esc_out10$esc_in度です。$esc_out
というように[]で絵文字コードを囲い、エスケープシーケンスの整合性をとるというものです。
どなたかご教授いただけないでしょうか?
0953nobodyさん
2008/02/21(木) 00:49:43ID:???0954nobodyさん
2008/02/21(木) 02:07:00ID:???いったんutf8文字列にしてから加工して戻す方がたぶん見通しいいよ。
0955952
2008/02/21(木) 03:31:08ID:???ありがとうございます。そちらの方で検討させていただきます。
このような複雑な置換について私は苦手でして、もしこれがお分かりになられるなら後学のためにも教えていただきたいのですが、ご無理でしょうか?
0956nobodyさん
2008/02/21(木) 10:36:05ID:???マッチした文字列はルールに沿って変換
ってことかな?
0957nobodyさん
2008/02/21(木) 10:36:46ID:???○$esc_inと$esc_outで囲って
0958nobodyさん
2008/02/21(木) 10:39:56ID:???# 絵文字部分を1文字ずつ加工。
# 1バイトずれてマッチしたり、ascii部分にマッチしないようにしてるので面倒
$str =~ s{
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)
([\x75-\x7b])([\x21-\x7e])
}{
sprintf "%s\x1b\x28\x42[%02x%02x]\x1b\x24\x42", $1, ord($2), ord($3)
}gex;
# 冗長なエスケープシーケンスの並びを除去
$str =~ s/(\x1b\x24\x42)+/$1/g;
$str =~ s/(\x1b\x28\x42)+/$1/g;
$str =~ s/\x1b\x28\x42\x1b\x24\x42//g;
$str =~ s/\x1b\x24\x42\x1b\x28\x42//g;
0959952
2008/02/21(木) 14:20:04ID:???ありがとうございます。
やはりすごい複雑になってしまうんですね。
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)
を見てもさっぱり理解できません。
これが絵文字でない文字を指すというのはわかるのですが、詳しく教えていただけないでしょうか?
または参考になる書籍などがありましたら教えていただけないでしょうか。
0960952
2008/02/21(木) 14:25:02ID:???これを作った方すごいですね。こんな便利なものがあると知りませんでした。
0961初心者
2008/02/21(木) 14:43:22ID:eHzrHpy8何から書いていいやらとっかかりがわかりません。どなたかアドバイス等をお願いします。
0962nobodyさん
2008/02/21(木) 14:48:53ID:???0963nobodyさん
2008/02/21(木) 14:49:53ID:???1. 本日の年・月・日・曜日を返す
2. x年y月z日の曜日を返す
3. x年y月1日の曜日を返す
4. x年y月の月末日を返す
5. x年y月の前月を返す
6. x年y月の翌月を返す
7. x年y月z日の前日を返す
8. x年y月z日の翌日を返す
0964初心者
2008/02/21(木) 15:13:33ID:eHzrHpy80965初心者
2008/02/21(木) 15:26:58ID:eHzrHpy80966nobodyさん
2008/02/21(木) 15:35:05ID:/bZGgDSr西暦が4で割り切れて、100で割り切れなければ閏年。
西暦が4で割り切れて、400でも割り切れれば、100で割り切れても閏年。
0967nobodyさん
2008/02/21(木) 15:35:25ID:???0968nobodyさん
2008/02/21(木) 15:38:45ID:/bZGgDSr0969nobodyさん
2008/02/21(木) 16:23:42ID:???月末=翌月1日の1日前( x年y月の月末日=(x年y+1月1日)-1日 )だから、
PerlインタプリタとOSとライブラリにバグがなけりゃ閏年だろうが、平年だろうが
関係なく計算できる。
Date::Calc使って計算すりゃ一発で出るだろ。
0970nobodyさん
2008/02/21(木) 16:35:43ID:???0972nobodyさん
2008/02/21(木) 18:08:27ID:???ggrksには同意だが、
たとえば誕生日の入力で2/29が妥当かどうかってのは閏年を判別しなきゃいかんだろ。
質問者の意図は知らんが。
0973969
2008/02/21(木) 18:13:29ID:???名前: 初心者 ID:eHzrHpy8 が継続的に質問してるんで、
ID:eHzrHpy8 : 「>961 カレンダーを作りたい。」
nobodyさん: 「>963」
ID:eHzrHpy8 : 「>965 月末日を知るのに閏年を知りたい」
って一連の流れだと思ったんだが、違うのか?
0974nobodyさん
2008/02/21(木) 18:21:25ID:???いいってことを>>969は言ってるんだね。
カレンダーを書くルーチンを考えたことないから、参考になるね。
0975nobodyさん
2008/02/21(木) 19:03:40ID:???末日計算を前提としてる話とごっちゃになっとる
0976nobodyさん
2008/02/21(木) 19:18:16ID:???でもさ、カレンダーを書くcgiくらい、散々ソースが転がっていそうな気がするんだけどね。
その辺の中から、適当に拾ってアレンジすれば目的は果たせるんじゃないの?
0977nobodyさん
2008/02/21(木) 19:26:16ID:???課題ともなるとそうもいかないんじゃない?
0978nobodyさん
2008/02/21(木) 19:33:08ID:???0981ID消し挑戦w
2008/02/23(土) 16:05:17ID:???0982nobodyさん
2008/02/23(土) 16:40:22ID:???package hoge;
use strict;
my $test = 'ABC';
sub new {
my $pkg = shift;
bless { hoge => $test, },$pkg;
}
みたいに先頭で定数定義してメソッド内で使いまくるのって問題ありますか?
これならuse strictしない方が良かったりする?
0983nobodyさん
2008/02/23(土) 16:46:25ID:???0984nobodyさん
2008/02/23(土) 17:07:54ID:???問題ないとおも。
ただ、定数として明示したければ、
use Readonly;
Readonly my $test = 'ABC';
しといた方が
0985nobodyさん
2008/02/23(土) 17:09:32ID:???0986nobodyさん
2008/02/23(土) 18:07:36ID:???0987nobodyさん
2008/02/23(土) 18:54:14ID:???箱から出したくないしので、blessに絡めたくないんです。
ちなみに全メソッドで使います。
>>984
CPAN配布物ですかね?
名前からして便利そうですが、標準で入ってないのは遠慮したいです。
>>985
おk
コールバックあたりも調べてみます。
とりあえずみなさんありがとうです。
0988nobodyさん
2008/02/23(土) 19:03:14ID:???0990nobodyさん
2008/02/23(土) 21:32:08ID:???0991nobodyさん
2008/02/23(土) 21:46:40ID:???CPAN配布物だけど、純Perlソースだから、インスコしなくても、
下記からダウソして自分のモジュールと同じディレクトリに入れればよさげ。
http://search.cpan.org/src/ROODE/Readonly-1.03/Readonly.pm
0992nobodyさん
2008/02/23(土) 21:47:49ID:???効率はいい。constant プラグマはいわばその構文糖。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html#Constant_Functions
変数展開コンテキストに埋め込みたいなら、リテラルのリファレンスに
名前を付ける方法もある。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables
パッケージグローバルな my 変数も、そのパッケージ内でうっかり
書き換える心配が無いのなら別に悪い選択肢じゃない。
0993982
2008/02/23(土) 22:24:31ID:???ダウソしました。できるだけ理解してから使ってみます。
>>990,>>992
サブルーチンでやるならsub Readonly () { 'ABC' }でおkですね。
とりあえず自分用はそうします。
もし他人に配布するような事があれば>>989,>>991が良いっす
短時間ですごい勉強になりました。ありがとう
0994nobodyさん
2008/02/24(日) 18:30:29ID:???0995nobodyさん
2008/02/25(月) 16:37:54ID:???0996nobodyさん
2008/02/25(月) 17:52:22ID:???0997nobodyさん
2008/02/25(月) 19:27:13ID:???Perlコーディング初心者質問スレ Part 57
http://pc11.2ch.net/test/read.cgi/php/1203935151/
0998nobodyさん
2008/02/25(月) 20:00:31ID:???埋め
0999nobodyさん
2008/02/25(月) 20:07:07ID:???1000nobodyさん
2008/02/25(月) 20:07:31ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。