[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/25 20:07 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlコーディング初心者質問スレ Part 56



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/

775 名前:nobodyさん mailto:sage [2008/01/19(土) 23:16:40 ID:???]
#!/usr/bin/env perl
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";

776 名前:760 mailto:sage [2008/01/19(土) 23:18:40 ID:???]
ファイルをアップロードするCGIを探してます。
日本語おかしかったですね、すいません。
サンプルを探したんですが
>>775のままだったら
ファイルをアップしたときにファイル名が
アップロードした日付になってしまいます。
ファイル名を変更することなくアップロードするにはどうすればいいでしょうか?

777 名前:nobodyさん [2008/01/20(日) 00:14:39 ID:1RDcSYMg]
my $outputfn = "$outputdir/$timestamp$ex";
のところを、そうじゃなくすれば良い。

778 名前:nobodyさん mailto:sage [2008/01/20(日) 00:15:00 ID:???]
>>776
マルチタイプを分割して、そのヘッダ部分に名前あるよ。

779 名前:nobodyさん mailto:sage [2008/01/20(日) 02:12:08 ID:???]
ついでにフォルダ名も表示してやれば、閑古鳥鳴くこと間違い無し。

780 名前:nobodyさん mailto:sage [2008/01/20(日) 03:03:09 ID:???]
サーバにファイル名を任意に保存出来るって危険じゃね?
同名ファイルの処理が必要になるし、文字化けとかあるし。
文字化けとかしたら、ダウソとか出来なくなる場合もあるし、
削除とかはsshログインして * とか使って消さないといけなく
なる場合もある。(解決は出来るから問題なしともいえるのだが)
日本語はファイルと一緒にコメントとして管理すべきだと思うけど、
どうかな?

781 名前:nobodyさん mailto:sage [2008/01/20(日) 10:25:46 ID:???]
>>780
間違いなく正しい。

782 名前:nobodyさん [2008/01/20(日) 19:19:48 ID:xw354eHR]
上の人とは別人だけどファイルのアップロードに関して質問

open(OUT, ">$filename");
binmode(OUT);
while (read($fh, $buf, 1024)) { print OUT $buf; }
close(OUT);
close($fh);

上記なソースをよく見かけるんだけど、
三行目で一気に処理するんじゃなくて、
1024バイトずつ取り出して処理する理由って何?

783 名前:nobodyさん mailto:sage [2008/01/20(日) 19:21:07 ID:???]
1000MBのバッファ蓄えろというのか



784 名前:775 mailto:sage [2008/01/20(日) 19:37:21 ID:???]
>>777
具体的にどうかえればいいのでしょうか?
教えてくださいとはいいません。
やってください

>>780
ご意見ありがとうございます。

785 名前:nobodyさん mailto:sage [2008/01/20(日) 20:21:40 ID:???]
完全に自分専用とかなら別なんだろうけどな。

786 名前:nobodyさん mailto:sage [2008/01/20(日) 22:56:33 ID:???]
>782-783 に関連した便乗質問で悪いけど、
レン鯖とかも考えた時の常識的なメモリ使用量ってどのくらい?
シュワルツ変換とか使っていいものかいつも悩む。

787 名前:nobodyさん mailto:sage [2008/01/20(日) 23:26:35 ID:???]
>>786
「レンタルサーバ メモリ使用量」でぐぐってみたらどうかな?
ま、突き詰めるとそのサービスの仕様次第となるだろう。
シュワルツ変換も「やってはいけない処理」ではなく、重たい処理
でしかないからな。それだけの質問では何もいえない。
具体的なソースを出して、この負荷は問題ないか?とかなら分かるが。

788 名前:nobodyさん [2008/01/21(月) 21:15:32 ID:29cYlZ80]
input type=file で送るファイルを指定しますが、
この場合のファイル名そのものを取得するようにするには
どのようにしたらよいですか?

789 名前:nobodyさん mailto:sage [2008/01/21(月) 21:26:25 ID:???]
>>788
HTTP_CONTENT_TYPEを見て、boundaryで区切って分割して、そのヘッダを読む。

790 名前:nobodyさん [2008/01/21(月) 22:20:09 ID:29cYlZ80]
>>789
有り難うございます
よく分かりませんが、ヒントを元にくぐってみます

791 名前:nobodyさん [2008/01/21(月) 22:33:12 ID:MggCWroJ]
toolkitについての質問です。

toolkitのテンプレートを利用ユーザに編集させてたいと思っているのですが、
[% 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";

または、テンプレート内で使える関数を指定できるとかありますでしょうか?

日本語マニュアル見てみましたが、それらしいものがありませんでした。
www.hakoniwa.net/tt/


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土方は新聞を読まない。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef