1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
792 名前:nobodyさん mailto:sage [2008/01/21(月) 23:09:44 ID:???] >>787 亀レスですみません。ぐぐってみました。 >782-783 のような流れをたまに見るので業界の暗黙知が あるのかと思いましたが特に無いようですね。 会社毎に見ていくと具体的な数字を出している所は少なかったですが、 少ないところで2MBと10Mb(=1.25MB?)でした。
793 名前:nobodyさん mailto:sage [2008/01/21(月) 23:29:51 ID:???] ムーアの法則があるので、数値は出しにくいところがある。 あるサーバで5秒くらいかかっていたのが、最新のでは1秒くらいで終わるので、 ぜんぜん問題にならなくなったとか。 でも、1分を1秒にするのはムーアの法則でも5年以上はかかるわけで、 そのくらいの規模はどう頑張っても無理だろという話だ。
794 名前:nobodyさん mailto:sage [2008/01/22(火) 09:20:05 ID:???] >>791 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. これを利用すれば普通は十分じゃねーの?
795 名前:nobodyさん mailto:sage [2008/01/22(火) 10:10:27 ID:???] テンプレート編集自体はtoolkit使うわけじゃないだろ? そこでチェックすりゃいいんじゃね?
796 名前:791 [2008/01/23(水) 00:37:55 ID:fM6ljyqY] >>794 >もし、ブロック定義が見つからない場合は、テンプレート名はINCLUDE_PATHのディレクトリにあるファイルか、ABSOLUTE/RELATIVEオプションが付いていれば絶対/相対パスにあるファイルを対象とします。 とのことですが、相対・絶対でスクリプト指定できてしまうということですよね? 考えても理解できませんでした、具体的にどのように利用すれば大丈夫なんでしょうか? >>795 たしかにテンプレート編集時にinclude等、使わせたくない文言を削除する方法もあるのですが、 入れようとしているシステムが銀行ほどではないんですけど、絶対にユーザにソースが漏れてはいけないシステムなんです。 (今後のシステム拡張等も含んで)チェックミスが出てきやすい作りで作るのはあまり好ましくないと考えています。 html-templateでも、includeなど規制する機能はなさそうですし・・・。 使いたい機能はifとloopだけなんですけど、 perlでセキュリティ完備したテンプレートエンジンほかにあるのでしょうか?
797 名前:nobodyさん mailto:sage [2008/01/23(水) 09:55:40 ID:???] >>796 HTML::Template には no_includes ってオプションがあるけど?
798 名前:nobodyさん mailto:sage [2008/01/23(水) 10:07:27 ID:???] INCLUDE_PATH以下に見られちゃいけないファイル置かないという選択肢はないの?
799 名前:nobodyさん mailto:sage [2008/01/23(水) 10:27:22 ID:???] >>796 そんな大事なシステムをお前程度のスキルの人間が任されていることに 激しく不安を感じるのだが...
800 名前:nobodyさん mailto:sage [2008/01/23(水) 11:28:58 ID:???] INCLUDE_PATHに関数渡すと・・・
801 名前:nobodyさん mailto:sage [2008/01/23(水) 11:58:33 ID:???] >>796 anond.hatelabo.jp/20071030153111
802 名前:nobodyさん mailto:sage [2008/01/23(水) 14:51:21 ID:???] データベースにutf8でデータを入れて、携帯の絵文字対応のsjisで取り出そうとしようと思っています。 $s = Unicode::Japanese->new; $s->set($aaa); $str = $s->sjis-imode; という風に、perlで記述したところ、0という値しか返ってきません。ちなみに$aaaをそのままprintすると、文字化けします。 何がいけないのかよくわかりません。どなたかお答えいただけるとうれしいです。
803 名前:nobodyさん mailto:sage [2008/01/23(水) 14:59:42 ID:???] sjis-imodeが悪いと思うよ。sjis_imodeだろ。 $str = ($s->sjis) - 'imode'; と書いたのと同じだな。いちおうエラーにはならないが、 use strictとuse warningsを使ってればいろいろ怒られる のではまらないですむパターンの間違いなので、なぜ 使わなかったのかよく反省しとけ。
804 名前:nobodyさん mailto:sage [2008/01/23(水) 15:07:11 ID:???] さっそくのご返答ありがとうございます。 試してみましたところ、こんどは??????という文字列が返ってきました。 いま現在、iモードシュミレータを使って表示させているのですが、これは携帯を使ってテストしないのが悪いのでしょうか?
805 名前:nobodyさん mailto:sage [2008/01/23(水) 15:27:16 ID:???] >>804 iモードシミュレータとなるとそれはもはやPerlの話題ではないな。 適切なところへいって質問するほうがお互いのため。 その前に$strを16進ダンプ表示してみて期待したバイト列になってるか どうかぐらいは確認しといた方がいいとは思うが。
806 名前:791 [2008/01/23(水) 21:46:29 ID:fM6ljyqY] >>797-802 いろいろな案有難うございます。 一つづつ試してみます。 どうもありがとうございました。
807 名前:nobodyさん [2008/01/23(水) 23:17:40 ID:FgvU3OwA] だれか >>775 をいじってくれる 心のやさしくて暇なやつはおらんのか サーバに日本語のファイルをUPしたいんだ
808 名前:nobodyさん mailto:sage [2008/01/23(水) 23:18:24 ID:???] するなといわれてそれを納得しておいてなんだそれはw
809 名前:プログラミング歴2ヶ月 [2008/01/23(水) 23:19:54 ID:bNex267N] ローカルホストで動かしたときに、mkdirでディレクトリを生成できていたのに いざwebにアップロードしてみると、ディレクトリの生成をやってくれません。 この場合、原因として何が考えられるのでしょうか。 ちなみにperlのパスはあっています。 mkdirなどでググって見ても、よくわかりませんでした。。。 ヒントだけでもいいんで、どなたかよろしくお願いします。(_ _)
810 名前:nobodyさん mailto:sage [2008/01/23(水) 23:27:24 ID:???] >>809 まずはパーミッションの確認からだろうな。
811 名前:nobodyさん mailto:sage [2008/01/23(水) 23:52:28 ID:???] >>809 他には2階層以上のディレクトリはmkdirで作れないとかかな?
812 名前:プログラミング歴2ヶ月 [2008/01/24(木) 00:03:36 ID:+24Wb9Pu] >>810 ,811 さん ご親切にご教授いただきありがとうございます。 先ほど、パーミッションを変更したところ解決いたしまして、とても感謝しております。 しかしそれと同時に新たな問題が浮上してきまして、困っています。。。 mkdirを行った後に、とあるdatファイルに文章を出力しているのですが、 出力した後の改行コードが■になってしまいます。。。 こっちもローカルホストではうまくいっていたのに、なぜなんでしょう??
813 名前:nobodyさん mailto:sage [2008/01/24(木) 00:05:46 ID:???] 改行コードの違いかな? ttp://www.tohoho-web.com/wwwxx011.htm
814 名前:nobodyさん mailto:sage [2008/01/24(木) 00:28:39 ID:???] >>812 ヒント ・UNIXではLF、WindowsではCRLF。 ・\nはLR、\r\nがCRLF。 ・FTPのアスキーモードで転送すると自動相互変換してくれる。
815 名前:プログラミング歴2ヶ月 [2008/01/24(木) 00:53:36 ID:+24Wb9Pu] >>813 ,814さん 解決しました。ありがとうございました! マジに感謝してます。
816 名前:nobodyさん mailto:sage [2008/01/24(木) 10:27:32 ID:???] >>815 例えばxyzzyみたいに、改行コードを確認したり、変更できる テキストエディタを入れておいたほうがいいよ。
817 名前:nobodyさん mailto:sage [2008/01/24(木) 10:41:34 ID:???] サクラエディタおすすめ。
818 名前:nobodyさん mailto:sage [2008/01/26(土) 19:03:18 ID:???] 保守
819 名前:nobodyさん [2008/01/28(月) 12:09:42 ID:fVIm37qB] Perl初心者です。 簡単なPerl/CGIのプログラム(掲示板など)が書ける程度のレベルです。 mod_perlの超初心者向けの解説本、ウェブサイトがあれば教えてください。 できれば日本語でお願いします。 あと、今は退社された方が書いたらしい、現在稼動中のプログラムのソースを入手したんですが、 ソースの最後に exit; って思いっきり書いてたりするんですが、これって大丈夫なのでしょうか?
820 名前:nobodyさん mailto:sage [2008/01/28(月) 12:53:50 ID:???] multix.jp/html/memo/030526.html#00010801
821 名前:nobodyさん [2008/01/28(月) 15:21:58 ID:eRROoQGz] ありがとうございます。 これに関して、オーバーライドを利用したコードを書いているとき、 ある関数(この場合はexit)が、どのパッケージに属しているかを調べる方法があればお願いします。
822 名前:nobodyさん [2008/01/28(月) 16:14:02 ID:Fd8GryNX] ときどき見かけるcodepageというのはどういうものなんでしょうか。 たとえば、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プログラミングでよく登場するので、ここで質問させていただきました
823 名前:nobodyさん mailto:sage [2008/01/28(月) 16:22:56 ID:???] exitはダメだけどexit(0)なら大丈夫、 実はそう言われてるけど逆で、exit(0)はダメだけどexitなら問題ない、 最近のヤツはどっちでもいい(具体的なバージョンはか書かれてない)、 色々と情報が混ざってて、調べれば調べるほど混乱してきた orz
824 名前:nobodyさん mailto:sage [2008/01/28(月) 17:37:21 ID:???] 動いてんならいいじゃない
825 名前:nobodyさん mailto:sage [2008/01/28(月) 18:19:41 ID:???] そうします。
826 名前:nobodyさん mailto:sage [2008/01/28(月) 18:33:58 ID:???] UTF8の文字列で、全角ひらがなが入ってきた場合、全角カタカナに変換しようとしているのですが 思うように行きません。 $name =~ tr/ぁ-ん/ァ-ン/ 一度、sjisやらecuやらに変換して、文字コードで置換させないと駄目でしょうか
827 名前:nobodyさん mailto:sage [2008/01/28(月) 18:39:31 ID:???] UTF8ならむしろ文字コード変換しないほうが置換しやすくないか?
828 名前:nobodyさん mailto:sage [2008/01/28(月) 18:55:50 ID:???] >>826 そんなことはない。 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; }
829 名前:nobodyさん mailto:sage [2008/01/28(月) 19:04:20 ID:???] >>822 > TeraTermは有名なので当然スレがあるかと思ったらありませんでした。 テラターム pc11.2ch.net/test/read.cgi/linux/1012915309/
830 名前:nobodyさん mailto:sage [2008/01/28(月) 19:21:58 ID:???] >>829 誘導thx!! いやースレタイ検索で引っかからなかったもんで。
831 名前:nobodyさん mailto:sage [2008/01/28(月) 21:13:04 ID:???] 確かにこりゃ罠だな……
832 名前:nobodyさん [2008/01/30(水) 17:37:10 ID:irpAKk1D] ActiveperlでローカルPC上に作成したWEBサイトにIE等でアクセスし、 その処理結果をファイルにしてデスクトップ上に出力したいのですが、 デスクトップまでのパスをどう取得すればいいか分かりません。 ログインユーザ毎にデスクトップのパスが変わってしまうので、 そのあたりを上手く解決できる方法があれば知りたいです。
833 名前:nobodyさん mailto:sage [2008/01/30(水) 18:10:39 ID:???] perlとは関係ないがユーザ毎に環境変数ってのが存在する
834 名前:nobodyさん mailto:sage [2008/01/30(水) 18:43:24 ID:???] use strict;use warnings; 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 );
835 名前:nobodyさん [2008/01/30(水) 21:04:32 ID:FClDhuIR] require Hoge; は通るんですが、 no strict 'refs'; require "Hoge"; が通りません。Can't locateとなります。 文字列からrequireするにはどう書いたらよいでしょうか。
836 名前:nobodyさん mailto:sage [2008/01/30(水) 21:12:10 ID:???] Hogeってのを用意すればいい
837 名前:nobodyさん mailto:sage [2008/01/30(水) 21:17:18 ID:???] どうもです。 Hogeはあるつもりなんですが、前者と後者は同じものを指してないですか?
838 名前:nobodyさん mailto:sage [2008/01/30(水) 21:29:04 ID:???] 拡張子を省略していたせいだった気がしました。ありがとうございました。
839 名前:832 mailto:sage [2008/01/30(水) 21:59:46 ID:???] >>833 システム環境変数とユーザー環境変数ってやつですよね。 ここにあらかじめデスクトップへのパスを設定するという事でしょうか? >>834 ソースありがとうございます。 実際に実行してみたんですが、CGIとして実行すると SYSTEM ユーザ名義で実行され、ログインユーザでのパスが取れませんでした。 DOS窓から実行するとバッチリなんですが…。 少し調べた所、WMIで実現できそうな気がしてきたので そちらを当たってみようと思います。ありがとうございました。
840 名前:nobodyさん mailto:sage [2008/01/30(水) 22:29:21 ID:???] 3年ぶりくらいにPerlを使ってみたのですが、 以前は日本語の検索の時、EUCを使わなくてはいけないとかあったと 思いますが、普通にshift-jisで書いて、パターンマッチも問題なし だったのですが、今のバージョンのPerlは文字コードとか気にしなくて 良くなりました?それともたまたま文字化けしなかっただけ?
841 名前:nobodyさん mailto:sage [2008/01/30(水) 22:53:08 ID:???] >>840 これを実行してみたらどうなる? print "表現"; print '表現';
842 名前:nobodyさん mailto:sage [2008/01/30(水) 23:05:02 ID:???] >841 だめっすね。 まだjcode.plとか使ってるんですかね。 実は全てunicodeで問題なくなったりしてますか? 日本語のパターンマッチで注意することとかまとめた いいページ知ってたら教えてください。
843 名前:nobodyさん mailto:sage [2008/01/30(水) 23:12:08 ID:???] >>842 一部の文字列を使う時だけ注意をして、POSTで受け取った文字列を jcode.pl 使うという程度でも、Shift-JISでいけることはいける。 ttp://www.shtml.jp/mojibake/sjis_cgi.html
844 名前:nobodyさん mailto:sage [2008/01/30(水) 23:19:37 ID:???] >843 thxです。しばらく離れていましたが、少し思い出しました。 結局Perlはその間進化していなかったのね。
845 名前:nobodyさん mailto:sage [2008/01/30(水) 23:19:46 ID:???] クライアント、サーバ共にWindowsで、SQLServerとVB使っている システムでも記号とか入力しようとすると駄目な場合もあるからな。 シビアに全部に対応とか考えなくても良いのではと思ったり。
846 名前:nobodyさん mailto:sage [2008/01/30(水) 23:22:28 ID:???] >>844 Perl は 5 が出てから結構経っているはずだよ。 3 年前に触ったのも 5 じゃないかな? そこまで大きな変化が無いからこそ、という メリットももあるんだけどね。 次に 6 には、構文とか大きな変化があるらしいから そっちに期待だなw
847 名前:nobodyさん mailto:sage [2008/01/30(水) 23:45:06 ID:???] たとえば This is a pen.という入力があって、 「This」にマッチしたら、 htmlの色のタグを付けて<font color>This</font>と置換する場合、 これをやると次に「This is」に色を付けたい場合マッチしなくなる のですが、上手いやり方あります? 先に「This is」の置換を する位しか思いつかない。
848 名前:nobodyさん mailto:sage [2008/01/31(木) 01:44:59 ID:???] 検索に使うデータは別に持っておくというのはどうだろうか。 Thisにマッチしたとき、 いきなり This → <tag>This</tag> と変換するのではなく、例えば「1番目の単語にマッチした」という情報だけ保存しておく。 で、最後にまとめて置換する。 Perlの持つ強力な文字列操作が活かされないという欠点はあるが。
849 名前:nobodyさん mailto:sage [2008/01/31(木) 07:23:10 ID:???] $in_str = "This is a pen."; $out_str = '<font color="red">' . $in_str . "</font>"; ここで $str に検索対象の文章を入れる。 $str =~ s/$in_str/$out_str/g;
850 名前:nobodyさん mailto:sage [2008/01/31(木) 09:05:07 ID:???] >849 それ同一箇所を何度も置換する場合でも大丈夫?
851 名前:nobodyさん mailto:age [2008/01/31(木) 09:23:09 ID:???] >>850 具体的にどういう場合?
852 名前:nobodyさん mailto:sage [2008/01/31(木) 09:59:40 ID:???] >849 <tag>This</tag> is a pen. が$strに入ったら、次にThis isは一致しないでしょ?
853 名前:nobodyさん mailto:sage [2008/01/31(木) 10:21:21 ID:???] 優先度つけて順番にやるしかない その優先度はあなた次第だもの。
854 名前:nobodyさん mailto:sage [2008/01/31(木) 12:45:35 ID:???] s/This is|This/REPLACEMENT/gみたいなことしたいんだろうか? 一括してやるなら長い方を先にすればいい
855 名前:nobodyさん mailto:sage [2008/01/31(木) 13:03:27 ID:???] This is a pen. ↓ <tag>This is</tag> a pen. このあとに、「tag」というフレーズで検索する可能性は否定できない。 いや、細かくマッチ条件つければ別だろうけど。
856 名前:nobodyさん [2008/01/31(木) 21:12:55 ID:ZyBf2Z6K] 配列と文字を引数とする場合の書き方がよく分かりません。できるのでしょうか? 以下のようにやってもだめでした。 &subtest(@arr,$str,@arr2); function () { my (@arr,$str,@arr2) = @_; }
857 名前:nobodyさん mailto:sage [2008/01/31(木) 22:22:57 ID:???] >>856 (@arr,$str,@arr2)は新しい配列として扱われるので、サブルーチン側では区切りが分からん。 arrとarr2は参照を渡すとか、要素数が分かってるならサブルーチン側で@_をspliceするとかがいいかも
858 名前:nobodyさん mailto:sage [2008/02/01(金) 00:10:05 ID:???] >845 長い方を先にした場合、 ThisとThis isとis a penがあって、 結論は<font>This is a pen</font>に色を付けたいのだ。 848の方法かなぁ。 ただ、入力テキストが100M位、マッチする検索リストが1万個とかなので、 動かせるか・・・。 Perlよりwordマクロとかの方がいいのかなぁ。 wordなら何度重なって色付けても問題ないし・・・。
859 名前:nobodyさん mailto:sage [2008/02/01(金) 00:32:08 ID:???] >>856 ヒント:リファレンス
860 名前:1/2 mailto:sage [2008/02/01(金) 03:03:29 ID:???] >>858 途中まで書いてまじめにやると面倒だという事は分かった。 あとは頑張ってくれ。 #!/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;
861 名前:2/2 mailto:sage [2008/02/01(金) 03:04:31 ID:???] sub add_tag { 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; }
862 名前:nobodyさん [2008/02/01(金) 04:53:15 ID:hS8kNEG7] if(A1 < B1 && A2 < B2 && A3 < B3 && A3 < B3 && A4 < B4) { $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つ揃ってから非表示にするにはどうすればいいですか? ご教授お願いします。
863 名前:nobodyさん mailto:sage [2008/02/01(金) 05:30:16 ID:???] 落ち着け
864 名前:nobodyさん mailto:sage [2008/02/01(金) 07:45:40 ID:???] >>862 それはない。他にミスがあるはず。
865 名前:nobodyさん [2008/02/01(金) 16:52:45 ID:hS8kNEG7] 命令が作動しなかったのは今回は説明で省略した命令(ifの条件付オプション)と 最初の5つの命令との相性が悪かったからかもしれませんね。 省略した部分内には、最初の5つの命令を一個ずつ(計5個)指定して、条件が満たされるごとに オプション項目が一つずつ消えていき、全部満たしたら最初の5つの命令でセレクト ごと非表示にするつもりでいたんです。
866 名前:nobodyさん mailto:sage [2008/02/01(金) 16:54:10 ID:???] 相性とな?
867 名前:nobodyさん mailto:sage [2008/02/01(金) 16:55:34 ID:???] バルクメモリさしたら動かなかった 相性が悪かったということだな
868 名前:nobodyさん mailto:sage [2008/02/01(金) 19:03:10 ID:???] >>862 まずは、配列の勉強頑張れ。
869 名前:nobodyさん mailto:sage [2008/02/02(土) 05:09:34 ID:???] 修士出たら就職を考えている現在3回生の情報の学生でperlが一番すきですが、 今年に入ってからいろいろと求人情報を集めてみたところperlの仕事少ないですね 噂には聞いてましたが、僕は何が何でもperlを仕事にしたいのです まあそれはおいといて、perlを仕事としてみたときどんな感じですかね? 皆さま先輩方の多くはperlを仕事としていらっしゃると思ったので、 是非とも業務内容、他言語と比べたときの待遇、仕事のやりがいなどなど、 ポジティブな意見(勧め)もネガティブな意見(愚痴)も生の声としてお聞かせ願えればと存じます。
870 名前: ◆TWARamEjuA mailto:sage [2008/02/02(土) 07:42:12 ID:???] 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)なんてのを無理を聴いて貰って備え付けましたですです♪
871 名前:nobodyさん mailto:sage [2008/02/02(土) 11:18:13 ID:???] perlを仕事で使うなら修士はオーバースペック。 高卒で十分な土方に好き好んで修士雇う経営者がいるのか?
872 名前:nobodyさん mailto:sage [2008/02/02(土) 11:21:37 ID:???] 修士雇う経営者がいないなら高卒って言えばいいだけのこと そんなこともわからないのか?
873 名前:nobodyさん mailto:sage [2008/02/02(土) 12:03:51 ID:???] perl土方は頭悪いな。 高卒で足りる仕事には高卒の賃金しか払わないという事だよ。
874 名前:nobodyさん mailto:sage [2008/02/02(土) 13:18:25 ID:???] >>872 それ、学歴詐称にあたるんじゃないの? ちょっと前、問題になったでしょ。
875 名前:nobodyさん mailto:sage [2008/02/02(土) 13:33:00 ID:???] perl土方は新聞を読まない。
876 名前:nobodyさん mailto:sage [2008/02/02(土) 13:46:46 ID:???] WEB系いきゃいいんじゃないの? 個人的にはなにがなんでもPerlとかいってるPerl使いは嫌だけど
877 名前:nobodyさん mailto:sage [2008/02/02(土) 14:25:02 ID:???] Perlがちょっとくらいできても仕事ねえぜ、と修士出の自宅警備員が言ってみる。 >>874 それ公務員ね。試験区分に対象の学歴があってそれに沿うことが望ましいとされてるから。 というかこれマ板のネタだろ。
878 名前:perl好き情報3回生(本物) ◆qqt5.0NxB6 mailto:sage [2008/02/02(土) 14:40:08 ID:???] ちょっと失礼します。 僕はWebprog板に>>869 と同一内容の書き込みをした者です。 >>869 は偽者であって僕がマルチポストをしたのではないことを明言しておきます。 トリップをつけたので本物しか相手をしないようお願いいたします。 迷惑をおかけして申し訳ありません。 お騒がせしました。
879 名前:nobodyさん mailto:sage [2008/02/02(土) 15:45:41 ID:???] 質問です。XML::RSSを使って、外部から取得したRSSを加工してHTML(euc-jp)に出力しているのですが、 一部の記号(それも機種依存文字含む)が文字化けします。 − → \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}/;
880 名前:879 mailto:sage [2008/02/02(土) 15:48:16 ID:???] ちなみに、 〜 → \x{FF5E} に化ける問題は、一番下に書いた置換で解決したのですが、\x{FF0D}は何故かそのまま 文字化けしたままです…
881 名前:879 mailto:sage [2008/02/02(土) 15:55:11 ID:???] すいません、>>880 は単純ミスでした、取り消します。
882 名前:879 mailto:sage [2008/02/02(土) 15:57:31 ID:???] 忘れていました。エラーメッセージが出ます。 hogehoge.cgi: "\x{ff0d}" does not map to euc-jp at hogehoge.cgi line 183.
883 名前:nobodyさん mailto:sage [2008/02/03(日) 01:13:34 ID:???] 求人ってほとんどPHPだよなぁ。プラスDreamWeaverの使用をセットで。 perl使ってるところはライブドアとかはてなとか高レベルに使いこなしてるところばっかり。 初〜中級のところは全部PHPになってしまった。
884 名前:nobodyさん mailto:sage [2008/02/03(日) 03:35:42 ID:???] モバイルならPerlも使ってるとこそこそこあるんでないか
885 名前:nobodyさん mailto:sage [2008/02/03(日) 11:14:58 ID:???] 正規表現とか以外なら、構文同じなんだからすぐに移植できるだろ。 あとはPEARとかを使いこなせればいいわけだから、Perlの基礎がある のなら、1週間程度で、出来るといえるんでね? Perlで作ったコードをPHPに移植して、これ、私が作りました、みたいな。
886 名前:nobodyさん mailto:sage [2008/02/03(日) 12:57:34 ID:???] PEARってperlでいうCGI.pmみたいなもん?
887 名前:質問 [2008/02/03(日) 13:04:56 ID:34/ZwImQ] このスレでよいかわかりませんが・・・ 項目を選択しボタンをクリックすると、あるページには選択した項目の画像ファイルを表示し、 もうひとつのページにはその選択した項目を表示させたいのですがどうしたらよいでしょうか? 最初のページには <form action="A.cgi" target="表示させたいページ"> を埋め込んでいるのですが、当たり前ですがこれだと"表示させたいページ"にしか表示できません。 A.cgiのなかでさらにこの部分だけは他のページへ表示させるとかできませんか?
888 名前:nobodyさん mailto:sage [2008/02/03(日) 14:09:58 ID:???] >>886 CPANじゃね?
889 名前:nobodyさん mailto:sage [2008/02/03(日) 14:12:18 ID:???] >>887 それは、Perlの話じゃなくて、htmlの話じゃないの? フレームタグを使って区切るか、テーブルタグを使って全部を表示させる方法がある。 板違いなので、これ以上の質問はしないように。
890 名前:nobodyさん mailto:sage [2008/02/04(月) 03:22:50 ID:???] >>879 メッセージのとおりで、変換表に該当するものがないんでしょ。 euc-jpMSとか使わないといけないんじゃないの?
891 名前:nobodyさん mailto:sage [2008/02/07(木) 12:55:00 ID:???] perl 5.8.5 CentOS 5.1 「out of memory」のときのエラーハンドリングの方法を教えてください。 dieのときは $::SIG{__DIE__} = sub {〜〜〜}; でいけることまではわかったのですが 「out of memory」がハンドリングできないのです。 よろしくおねがいします
892 名前:nobodyさん mailto:sage [2008/02/07(木) 15:49:01 ID:???] OSの制限だから、ハンドリング考えるよりコード見直す。 それができないのなら、OSの制限上げる。メモリ積む。
893 名前:nobodyさん mailto:sage [2008/02/07(木) 19:10:28 ID:???] perl5.8 my @value=(0,1,3,8); #任意のkey my @hoge=('hoge1','hoge2','hoge3'....); #表示用配列 my $disp; foreach (@value) { $disp .= ',' if $disp; $disp .= $hoge[$_]; } という処理をしているんですが、これってJOINでできませんか? map使ってもこれより簡単に書けないですよね?
894 名前:nobodyさん mailto:sage [2008/02/07(木) 19:28:15 ID:???] こういうこと? my @value = (0, 1, 3, 8); my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9'); print join ',', @hoge[@value];
895 名前:nobodyさん mailto:sage [2008/02/07(木) 20:34:51 ID:???] >>894 おお。ありがとうございます。コードがすっきりします^^
896 名前:nobodyさん mailto:sage [2008/02/08(金) 09:47:17 ID:???] すいません。もう一点。 my $value = "0,1,3,8"; my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9'); これは join ',',@hoge[sprit',',$value]; ですよね? splitしてjoinして勿体無い感じ。。
897 名前:nobodyさん mailto:sage [2008/02/08(金) 10:08:10 ID:???] splitとspliceは別物
898 名前:nobodyさん mailto:sage [2008/02/09(土) 18:24:58 ID:???] valueがスカラーで入れなきゃ一回joinで済む話。
899 名前:nobodyさん [2008/02/11(月) 09:15:09 ID:7AZat8M4] ファイルの最後の行番号を取得したいんですが、 my $endline = $. while (<FH>); としてとりえず取得できたんですが、 その後 seek FH,0,0; として、また1行目から別の処理したいんですがうまくできません。 seekの戻り値をprintしてみると1を返してますが、先頭には戻ってないようです。 windows環境なのが原因でしょうか?
900 名前:nobodyさん mailto:sage [2008/02/11(月) 09:31:45 ID:???] my $endlineだと局所化されて外側で取得できなくない? seekしても$.はリセットされないから先頭に巻き戻したら$.= undefとかすればいい
901 名前:nobodyさん mailto:sage [2008/02/11(月) 11:26:23 ID:???] >>900 さんレスありがとうございます。 >局所化 あ、ほんとだ。ミスってました。 undef $.; reset $.; それぞれ試してみましたが変化ありませんでした。 その後に while (<FH>) { if ($. == $bigin .. $. == $end) { といった処理をしたいんですが、どうもうまくいきません。
902 名前:nobodyさん mailto:sage [2008/02/11(月) 11:49:03 ID:???] $. = 0;としたらうまくいきました。 ありがとうございました。
903 名前:nobodyさん mailto:sage [2008/02/12(火) 21:28:15 ID:???] 文字コードについて質問します。 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シーケンスの処理がどうしたものかと・・・
904 名前:nobodyさん mailto:sage [2008/02/12(火) 23:23:01 ID:???] use lib '../lib'; のように相対パスを使うと出来るけど use lib '/i/cgi-bin/lib'; のように絶対パスを使うと動かなくなります サーバーの設定によって絶対パスだと読み込めなかったりするんでしょうか 普通のリンクだと絶対パスでリンクできます
905 名前:nobodyさん mailto:sage [2008/02/12(火) 23:31:03 ID:???] >>904 本当にそれが絶対パスであれば使えると思うのだが、おそらく違うんだと思う。
906 名前:nobodyさん mailto:sage [2008/02/13(水) 02:37:13 ID:???] >>904 perlから使う絶対パスはwebサイト上の絶対パスじゃないよ。 ・ http鯖がルートとして扱うディレクトリからの絶対パス ・ 鯖のOSの絶対パス の違いを理解しような。
907 名前:nobodyさん mailto:sage [2008/02/13(水) 02:39:50 ID:???] >>903 JISとかISO-2022-JPにはローマ数字はないから。 Encode::EUCJPMS - Microsoft Compatible Encodings for Japanese - search.cpan.org search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm あたりをいれて、cp50220 とか cp50221 で変換する。
908 名前:906 mailto:sage [2008/02/13(水) 10:48:35 ID:???] 有難うございます 調べてみます
909 名前:904 mailto:sage [2008/02/13(水) 10:49:51 ID:???] >>906 でした
910 名前:nobodyさん mailto:sage [2008/02/13(水) 12:25:12 ID:???] >>907 ありがとうございます Encode::EUCJPMSモジュールをいれて、 use Encode::EUCJPMS; use Encode; my $cp50220_str = Encode::from_to( $utf8_str , "UTF8" , "CP50220" ); で良いのでしょうか? 実はフォーム入力はShiftJISでして、CP932からutf-8に一旦エンコードしています。 これで問題はないでしょうか?
911 名前:nobodyさん mailto:sage [2008/02/14(木) 02:49:22 ID:???] >>910 UTF-8に変換するときにエラーになってなきゃ大丈夫なんじゃない? 〜 あたりが微妙ではあるけど。
912 名前:nobodyさん [2008/02/14(木) 10:56:12 ID:AY3pAm1W] 教えてください。サーバではなくて、自分のPCにPerlをインストールしています。 #!/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 = 'www.google.co.jp/ '; とした時に IEにこの$urlを開かせるにはどうすればよいのでしょうか。よろしくお願いします。
913 名前:nobodyさん mailto:sage [2008/02/14(木) 11:58:11 ID:???] ヒント: system("start", $url);
914 名前:nobodyさん mailto:sage [2008/02/14(木) 12:23:37 ID:???] >>913 うわぁぁ。ありがとうございました!
915 名前:nobodyさん mailto:sage [2008/02/14(木) 12:27:34 ID:???] /\___/ヽ ヽ / ::::::::::::::::\ つ . | ,,-‐‐ ‐‐-、 .:::| わ | 、_(o)_,: _(o)_, :::|ぁぁ . | ::< .::|あぁ \ /( [三] )ヽ ::/ああ /`ー‐--‐‐―´\ぁあ
916 名前:910 mailto:sage [2008/02/14(木) 12:58:24 ID:???] >>911 ありがとうございます。 「〜」は手動でE3 80 9Cに置き換えています。 では教えていただいた方法でやってみようと思います。
917 名前:nobodyさん mailto:sage [2008/02/14(木) 15:13:40 ID:???] fedora8なマシンで監視装置をでっち上げようとしています 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が送られません 何が悪いのかご教示下さい
918 名前:nobodyさん mailto:sage [2008/02/14(木) 15:18:19 ID:???] 半角コロン
919 名前:nobodyさん mailto:sage [2008/02/14(木) 15:28:13 ID:???] つ[ $smtp->datasend( "\n$body\n" ); ]
920 名前:917 mailto:sage [2008/02/14(木) 15:31:16 ID:???] >>919 できました ありがとう ( ;∀;)
921 名前:919 mailto:sage [2008/02/14(木) 15:57:21 ID:???] >>920 よかったな。 バグった状態だと$bodyが送られてこないんじゃなくヘッダに入ってたはず。 メールヘッダと本文の切り分けは「半角コロンが入ってない行が登場した所から本文」って事になってるから、 どんな文が入るか分からん時は、ヘッダの最後に空行を入れれば桶。基本なんで覚えとくと便利。
922 名前:917 mailto:sage [2008/02/14(木) 16:25:19 ID:???] >>919 覚えておきます ありがとうございました(^^ これで沈みます
923 名前:nobodyさん mailto:sage [2008/02/17(日) 21:47:50 ID:???] >>921 ヘッダと本文は空行で分けられます。 ついでに言うと、改行は CRLF (\r\n) にすること。 MTA によっては受け付けてくれません。
924 名前:exe [2008/02/19(火) 11:44:47 ID:L1DAdjnk] ファイルにaからz、AからZを交互に連続で出力し、最後に改行して、この処理を10回繰り返す方法を教えてください。 aAbBcCdDeE・・・yYzZ のような形です。お願いします。
925 名前:nobodyさん mailto:sage [2008/02/19(火) 12:05:44 ID:???] 宿題は自分でやろうな。
926 名前:nobodyさん mailto:sage [2008/02/19(火) 12:06:11 ID:???] print "aAbB.....yYzZ\n"; を10個コピペでおk
927 名前:exe [2008/02/19(火) 14:24:58 ID:L1DAdjnk] すいません。10回出力はわかるんですが、for文を使ってaAbBcC...zZの表示方がわからないのでどなたかお願いします。
928 名前:nobodyさん mailto:sage [2008/02/19(火) 14:25:28 ID:???] for(1..10) { for(65..90) { print pack("C*",$_); print pack("C*",$_+32); } print "\n"; }
929 名前:exe [2008/02/19(火) 14:42:37 ID:L1DAdjnk] nobody さんありがとうございます。 ちなみに↓の形で書くと、どうしたらよいでしょうか。 何度もすいません。 open (FILE, '>test1.txt') or die "$!"; for my $count (0..9) { for my $i ("a".."z") { } print FILE "\n"; } close(FILE);
930 名前:nobodyさん mailto:sage [2008/02/19(火) 14:59:33 ID:???] # # $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);
931 名前:nobodyさん mailto:sage [2008/02/19(火) 15:01:42 ID:???] # # ↑はウソ # 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);
932 名前:exe [2008/02/19(火) 15:06:17 ID:L1DAdjnk] ありがとうございます。$Countは適当においてる変数です。
933 名前:exe [2008/02/19(火) 15:54:07 ID:L1DAdjnk] 先ほど↑で作ったファイルを出力として、小文字のみを取り除いた結果を標準出力に表示するにはどうしたらよいでしょうか? 自力でやらないといけないのはわかっているのですが、時間がなくて・・どなたかお願いします。
934 名前:nobodyさん mailto:sage [2008/02/19(火) 16:04:55 ID:???] # # そういうウンコみたいな仕事を漏れにも回してくれよ # $sent = 'dTgZtyYthSGetLt'; $sent =~ s/[a-z]//g; print $sent;
935 名前:nobodyさん mailto:sage [2008/02/19(火) 16:31:12 ID:???] 馬鹿だな、まずはおっぱいうpしてからだろjk・・・
936 名前:exe [2008/02/19(火) 16:55:41 ID:L1DAdjnk] 仕事では無いです。笑われてるかもしれませんが初心者の 自分にとっては色々難しくて。時間もありませんでしたので・・
937 名前:nobodyさん mailto:sage [2008/02/19(火) 17:15:11 ID:???] perlで外部サーバー上のファイルを読み込む方法はありますか? OPEN("www.aa.com/a.cgi ") みたいにして a.cgiの出力結果を元にさらに処理をしたいと思っています
938 名前:nobodyさん [2008/02/19(火) 17:30:48 ID:gLoGL0Ae] >>937 いい手じゃないが、Linuxでwgetが入ってる状態で漏れが使ってる方法 $foo = `wget -O- www.aa.com/a.cgi`;
939 名前:nobodyさん mailto:sage [2008/02/19(火) 17:45:18 ID:???] いやそれが最強。wgetのWIN版もあるからな。-qも付けると良い。
940 名前:nobodyさん mailto:sage [2008/02/19(火) 17:55:56 ID:???] LWP
941 名前:937 mailto:sage [2008/02/19(火) 19:26:35 ID:???] >>938 ありがとうございました 無事 取得することが出来ました。 あと[`]でくくるのはなぜなのでしょう?
942 名前:938 mailto:sage [2008/02/19(火) 20:13:58 ID:???] >939 モジュール使った方が互換性高いし、そっちの方が良いと思ったんで。 >940のLWPを使うのが最良だと思うが、使い方調べてる気分的な余裕がないんで、 wget使ってそのまま今に至る感じだ。 >941 外部コマンド実行だから。``で囲むと外部コマンドを実行して標準出力が戻ってくる。 ちなみに"perl -T"でやってると、そのままじゃ外部コマンド動かない事があるんで注意。 $ENV{'IFS'}, $ENV{'CDPATH'}, $ENV{'ENV'}, $ENV{'BASH_ENV'}, $ENV{'PATH'}を 退避・削除してから外部コマンドを実行し戻す必要がある。
943 名前:nobodyさん mailto:sage [2008/02/19(火) 20:26:04 ID:???] LWP
944 名前:nobodyさん mailto:sage [2008/02/20(水) 08:23:23 ID:???] >>937-942 search.cpan.org/~gaas/libwww-perl-5.808/lib/LWP/Simple.pm
945 名前:937 mailto:sage [2008/02/20(水) 12:35:11 ID:???] >>938-944 ありがとうございます。 LWPも使えました 研究してみます。
946 名前:nobodyさん mailto:sage [2008/02/20(水) 13:15:09 ID:???] @urlの中に500くらいのサイトのURLが入っています。 そのURLのページにキーワードか書かれているかどうか調べるとき、 foreach (@url) { LWPで取得してキーワードが見つかったら、$count++; } みたいにすると一つずつなので物凄く時間が掛かります。 10個くらい一気に取得する方法はないでしょうか?
947 名前:nobodyさん mailto:sage [2008/02/20(水) 13:35:03 ID:???] 同じプログラムを10個並列に走らせてそれぞれに50サイトずつ担当させるのが一番楽だと思うよ。
948 名前:nobodyさん mailto:sage [2008/02/20(水) 13:43:09 ID:???] こういう場合ってほとんどはLWPで取得するのが一番時間かかってるのかな?
949 名前:nobodyさん mailto:sage [2008/02/20(水) 13:59:11 ID:???] >>947 そうですか…分割してみます。 >>948 応答待ちが長いと停止状態です。
950 名前:nobodyさん mailto:sage [2008/02/20(水) 14:34:00 ID:???] fork
951 名前:nobodyさん mailto:sage [2008/02/20(水) 15:01:34 ID:???] プロセスで並列化するとプロセスAは終わってるけど プロセスBは重いサイトがリストにあって終わってないとか 無駄に待ち時間増えるから、threads使える環境ならthreadsのが楽でない?
952 名前:nobodyさん mailto:sage [2008/02/20(水) 15:03:07 ID:???] JISの文から携帯電話の絵文字部分を退避させたいと思っています。 正規表現について教えてください。 通常の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 というように[]で絵文字コードを囲い、エスケープシーケンスの整合性をとるというものです。 どなたかご教授いただけないでしょうか?
953 名前:nobodyさん mailto:sage [2008/02/21(木) 00:49:43 ID:???] それのどこがWeb Programmingなんだ?
954 名前:nobodyさん mailto:sage [2008/02/21(木) 02:07:00 ID:???] JISコードは加工には向かないので、Encode::JP::Mobileあたり使って いったんutf8文字列にしてから加工して戻す方がたぶん見通しいいよ。
955 名前:952 mailto:sage [2008/02/21(木) 03:31:08 ID:???] >>954 ありがとうございます。そちらの方で検討させていただきます。 このような複雑な置換について私は苦手でして、もしこれがお分かりになられるなら後学のためにも教えていただきたいのですが、ご無理でしょうか?
956 名前:nobodyさん mailto:sage [2008/02/21(木) 10:36:05 ID:???] マッチした文字列の前後は$esc_inで囲って マッチした文字列はルールに沿って変換 ってことかな?
957 名前:nobodyさん mailto:sage [2008/02/21(木) 10:36:46 ID:???] ×$esc_inで囲って ○$esc_inと$esc_outで囲って
958 名前:nobodyさん mailto:sage [2008/02/21(木) 10:39:56 ID:???] 無理に書くとこんな感じ? 全くお勧めしない。 # 絵文字部分を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;
959 名前:952 mailto:sage [2008/02/21(木) 14:20:04 ID:???] >>958 ありがとうございます。 やはりすごい複雑になってしまうんですね。 ( (?:\G | ^[^\1b]*\x1b\x24\x42) (?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*? ) を見てもさっぱり理解できません。 これが絵文字でない文字を指すというのはわかるのですが、詳しく教えていただけないでしょうか? または参考になる書籍などがありましたら教えていただけないでしょうか。
960 名前:952 mailto:sage [2008/02/21(木) 14:25:02 ID:???] 書き忘れましたが、Encode::JP::Mobileを使い無事utf8にできました。 これを作った方すごいですね。こんな便利なものがあると知りませんでした。
961 名前:初心者 [2008/02/21(木) 14:43:22 ID:eHzrHpy8] perlでカレンダーを作るのですが、プログラミングする内容としては何がひつようでしょうか? 何から書いていいやらとっかかりがわかりません。どなたかアドバイス等をお願いします。
962 名前:nobodyさん mailto:sage [2008/02/21(木) 14:48:53 ID:???] ggrks
963 名前:nobodyさん mailto:sage [2008/02/21(木) 14:49:53 ID:???] とりあえず以下のサブルーチンを作る 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日の翌日を返す
964 名前:初心者 [2008/02/21(木) 15:13:33 ID:eHzrHpy8] ありがとうございます。
965 名前:初心者 [2008/02/21(木) 15:26:58 ID:eHzrHpy8] 今年のようなうるう年かどうかを調べるにはどうしたらよいのでしょうか?
966 名前:nobodyさん [2008/02/21(木) 15:35:05 ID:/bZGgDSr] 閏年の定義に当てはまるかどうかを調べればよい。>>965 西暦が4で割り切れて、100で割り切れなければ閏年。 西暦が4で割り切れて、400でも割り切れれば、100で割り切れても閏年。
967 名前:nobodyさん mailto:sage [2008/02/21(木) 15:35:25 ID:???] いちいち相手にするからググればわかるような質問が絶えないんだよな
968 名前:nobodyさん [2008/02/21(木) 15:38:45 ID:/bZGgDSr] 悪かった。今は反省している。
969 名前:nobodyさん mailto:sage [2008/02/21(木) 16:23:42 ID:???] 閏年を知る必要は無いはず。 月末=翌月1日の1日前( x年y月の月末日=(x年y+1月1日)-1日 )だから、 PerlインタプリタとOSとライブラリにバグがなけりゃ閏年だろうが、平年だろうが 関係なく計算できる。 Date::Calc使って計算すりゃ一発で出るだろ。
970 名前:nobodyさん mailto:sage [2008/02/21(木) 16:35:43 ID:???] ググっても分からないような初心者質問って?
971 名前:nobodyさん mailto:sage [2008/02/21(木) 17:03:05 ID:???] >>1
972 名前:nobodyさん mailto:sage [2008/02/21(木) 18:08:27 ID:???] >>969 ggrksには同意だが、 たとえば誕生日の入力で2/29が妥当かどうかってのは閏年を判別しなきゃいかんだろ。 質問者の意図は知らんが。
973 名前:969 mailto:sage [2008/02/21(木) 18:13:29 ID:???] >>972 名前: 初心者 ID:eHzrHpy8 が継続的に質問してるんで、 ID:eHzrHpy8 : 「>961 カレンダーを作りたい。」 nobodyさん: 「>963」 ID:eHzrHpy8 : 「>965 月末日を知るのに閏年を知りたい」 って一連の流れだと思ったんだが、違うのか?
974 名前:nobodyさん mailto:sage [2008/02/21(木) 18:21:25 ID:???] 要するに2月のカレンダーを作るときには、3月1日の日付から−1してやって、日付を取得すれば いいってことを>>969 は言ってるんだね。 カレンダーを書くルーチンを考えたことないから、参考になるね。
975 名前:nobodyさん mailto:sage [2008/02/21(木) 19:03:40 ID:???] localtime使う前提だよね? 末日計算を前提としてる話とごっちゃになっとる
976 名前:nobodyさん mailto:sage [2008/02/21(木) 19:18:16 ID:???] もちろん。 でもさ、カレンダーを書くcgiくらい、散々ソースが転がっていそうな気がするんだけどね。 その辺の中から、適当に拾ってアレンジすれば目的は果たせるんじゃないの?
977 名前:nobodyさん mailto:sage [2008/02/21(木) 19:26:16 ID:???] 自分が使うカレンダーならどっかから拾ってくればいいが、 課題ともなるとそうもいかないんじゃない?
978 名前:nobodyさん mailto:sage [2008/02/21(木) 19:33:08 ID:???] というか、今更perlの課題とか出す大学とかあるの?
979 名前:nobodyさん mailto:sage [2008/02/21(木) 20:55:28 ID:???] >>952 とまったく同じ文章が今日MLに流れてきてたけど、同一人物?
980 名前:nobodyさん mailto:sage [2008/02/21(木) 23:37:02 ID:???] >>978 専門学校とかじゃね?
981 名前:ID消し挑戦w mailto:000 [2008/02/23(土) 16:05:17 ID:???] テスト^^;
982 名前:nobodyさん mailto:sage [2008/02/23(土) 16:40:22 ID:???] 自分用モジュールつくってるんだけどさ package hoge; use strict; my $test = 'ABC'; sub new { my $pkg = shift; bless { hoge => $test, },$pkg; } みたいに先頭で定数定義してメソッド内で使いまくるのって問題ありますか? これならuse strictしない方が良かったりする?
983 名前:nobodyさん mailto:sage [2008/02/23(土) 16:46:25 ID:???] 外部値で初期化したいなら引数として渡せば?
984 名前:nobodyさん mailto:sage [2008/02/23(土) 17:07:54 ID:???] >>982 問題ないとおも。 ただ、定数として明示したければ、 use Readonly; Readonly my $test = 'ABC'; しといた方が
985 名前:nobodyさん mailto:sage [2008/02/23(土) 17:09:32 ID:???] 定数は大文字にする習し
986 名前:nobodyさん mailto:sage [2008/02/23(土) 18:07:36 ID:???] (・∀・)
987 名前:nobodyさん mailto:sage [2008/02/23(土) 18:54:14 ID:???] >>983 箱から出したくないしので、blessに絡めたくないんです。 ちなみに全メソッドで使います。 >>984 CPAN配布物ですかね? 名前からして便利そうですが、標準で入ってないのは遠慮したいです。 >>985 おk コールバックあたりも調べてみます。 とりあえずみなさんありがとうです。
988 名前:nobodyさん mailto:sage [2008/02/23(土) 19:03:14 ID:???] use Vars, oursなんてあったのか。
989 名前:nobodyさん mailto:sage [2008/02/23(土) 19:57:03 ID:???] >>987 標準ならconstantプラグマ
990 名前:nobodyさん mailto:sage [2008/02/23(土) 21:32:08 ID:???] 以前は値を返すだけのsub使ってた。
991 名前:nobodyさん mailto:sage [2008/02/23(土) 21:46:40 ID:???] >>987 CPAN配布物だけど、純Perlソースだから、インスコしなくても、 下記からダウソして自分のモジュールと同じディレクトリに入れればよさげ。 search.cpan.org/src/ROODE/Readonly-1.03/Readonly.pm
992 名前:nobodyさん mailto:sage [2008/02/23(土) 21:47:49 ID:???] 空のプロトタイプ付きサブルーチンはコンパイル時に展開されるので 効率はいい。constant プラグマはいわばその構文糖。 www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html#Constant_Functions 変数展開コンテキストに埋め込みたいなら、リテラルのリファレンスに 名前を付ける方法もある。 www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables パッケージグローバルな my 変数も、そのパッケージ内でうっかり 書き換える心配が無いのなら別に悪い選択肢じゃない。
993 名前:982 mailto:sage [2008/02/23(土) 22:24:31 ID:???] >>991 ダウソしました。できるだけ理解してから使ってみます。 >>990 ,>>992 サブルーチンでやるならsub Readonly () { 'ABC' }でおkですね。 とりあえず自分用はそうします。 もし他人に配布するような事があれば>>989 ,>>991 が良いっす 短時間ですごい勉強になりました。ありがとう
994 名前:nobodyさん mailto:sage [2008/02/24(日) 18:30:29 ID:???] 保 守
995 名前:nobodyさん mailto:sage [2008/02/25(月) 16:37:54 ID:???] 次スレ希望
996 名前:nobodyさん mailto:sage [2008/02/25(月) 17:52:22 ID:???] テンプレ貼るなら立ててやるよ
997 名前:nobodyさん mailto:sage [2008/02/25(月) 19:27:13 ID:???] ほらよ Perlコーディング初心者質問スレ Part 57 pc11.2ch.net/test/read.cgi/php/1203935151/
998 名前:nobodyさん mailto:sage [2008/02/25(月) 20:00:31 ID:???] 乙です。 埋め
999 名前:nobodyさん mailto:sage [2008/02/25(月) 20:07:07 ID:???] 埋め
1000 名前:nobodyさん mailto:sage [2008/02/25(月) 20:07:31 ID:???] 埋め
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。