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


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

Perlについての質問箱 34箱目



1 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:07:22 ]
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 ttp://pc11.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

ttp://www.perl.org/get.html
● 2008/01/11現在の最新版: 5.10.0
● 2007/01/11現在の開発版: 5.9.5

前スレ
Perlについての質問箱 33箱目
pc11.2ch.net/test/read.cgi/tech/1192463997/

リンク集は>>2-3
過去スレは>>4 あたり


577 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:47:30 ]
他人に頼りすぎだ。
パフォーマンスが気になるなら、ちょっと確かめてみればいい。
こんなコード断片が書けないのなら、パフォーマンスなど気にするだけ無駄。

use Benchmark qw(timethese);
my $source = join(',', ('abcdefg')x80000);
my $result_ref;
timethese(100, {
temp => sub { my @temp_array = split(/,/, $source); $result_ref = \@temp_array; },
bracket => sub { $result_ref = [ split(/,/, $source) ]; },
none => sub { split(/,/, $source); },
});

Benchmark: timing 100 iterations of bracket, copy, none, temp...
bracket: 9 wallclock secs ( 8.94 usr + 0.00 sys = 8.94 CPU) @ 11.19/s (n=100)
none: 6 wallclock secs ( 6.76 usr + 0.00 sys = 6.76 CPU) @ 14.80/s (n=100)
temp: 15 wallclock secs (14.27 usr + 0.00 sys = 14.27 CPU) @ 7.01/s (n=100)

578 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:00:25 ]
>>575
証拠は俺の脳内。
信じられないなら自分でソース読もう。

579 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:54:31 ]
>>577
void コンテキストで split 使うと @_ に入るので注意な。

580 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 19:05:26 ]
lala-zコンテキストなら?

581 名前:ジミー [2008/02/29(金) 21:41:12 ]
$str = "a,b,";
@ar = split(/,\n/, $str);
print join(',', @ar);

これを実行すると a,b と表示されます。
つまり、split は末尾の空文字列を取り出してくれないようです。
末尾の空文字列を取り出して、このコードが a,b, と表示させるように
するための簡単な方法ってありませんかね。
(もちろん愚直に工夫すれば何とでもなるが、スマートな解がほしい)

582 名前:ジミー [2008/02/29(金) 21:41:59 ]
>581
コード間違えた。(実験してたコードにしてもた。)
× @ar = split(/,\n/, $str);
○ @ar = split(/,/, $str);



583 名前:ジミー mailto:sage [2008/02/29(金) 21:46:48 ]
解決した。
@ar = split(/,/, $str, -1);
ですね。

584 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:48:12 ]
print join ',', split /,/, q/a,b,/, -1;

585 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:44:11 ]
>>566
特にないけど、Perlならそういう面白いインターフェイスが用意されてそうだなと思ったまでで



586 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:06:48 ]
麻雀なのに、娘とか嫁とか家族とかw


乞食は想像を絶するなw

587 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:07:14 ]
スマン、誤爆

588 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 09:16:39 ]
色々と妄想させてくれる。

世の中には「義妹が最強だろ」という誤爆レスが元になって作られたゲームとかあるからな。
人間の妄想力ってのは凄いもんだぜ。

589 名前:デフォルトの名無しさん [2008/03/02(日) 10:27:48 ]
おにぃちゃん、ヤメテ!

590 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:48:55 ]
ヘッヘッヘ、いいじゃねぇか ポン ヘッヘッヘ

591 名前:デフォルトの名無しさん [2008/03/02(日) 11:09:57 ]
Active Perl 5.10.0 用の DBD-mysql ってどこにあるの?

592 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:48:26 ]
>589-590
エロゲじゃねーよw

593 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:23:27 ]
>>591
cpan.uwinnipeg.ca/PPMPackages/10xx/

594 名前:591 [2008/03/02(日) 21:46:50 ]
>>593
ありがとう。無事インストできたよん。

595 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:11:40 ]
インスト



596 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:43:34 ]
泣いても笑っても、お前のまんじゅうは無いよ。

597 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:28:09 ]
Wiki文法でのテキスト整形で悩んでいます。

改行含めた長い文章が $i に入ってます。
文章中のリンクアンカーに相当する部分はWikipediaなどでお馴染みの
[[テキスト]]
という感じで書かれています。

これを
$i =~ s/\[\[(.+?)\]\]/<a href="$1">$1<\/a>/g;
で変換しているのですが、できれば <a href="$1"> の中のほうの$1をURLエンコードして収めたいのです。

URLエンコードのサブスクリプトはこんな感じです。

sub url_enc {
local($_) = @_;
s/(\W)/'%' . unpack('H2', $1)/eg;
s/\s/+/g;
$_;
}

よろしくお願いします。


598 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:49:12 ]
すみません、補足です。
CGIにはインフォパスか引数で渡します。

<a href="hoge.cgi?$1">

こんな感じで。

599 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:31:00 ]
サブルーチンに置換部分をまとめて、
$i =~ s/\[\[(.+?)\]\]/&url_enc($1)/eg;

600 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:58:47 ]
そっか!e修飾子を利用した時は置換部分は関数以外は入れたらダメなんですね。

$i =~ s/\[\[(.+?)\]\]/<a href="&url_enc($1)">$1<\/a>/eg;

だとエラーが出るんで何でだろうとずっと思ってたんです。
ありがとうございます。勉強になりました。

601 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:25:15 ]
>>600
自分で '%' . unpack('H2', $1) なんてのを入れてるじゃん。

sub html_escape {
  my $str = $_[0];
  $str =~ s/&(?!(?:\w+|#(?:[Xx][0-9A-Fa-f]+|[0-9]+));)/&/g;
  $str =~ s/([\x00-\x09\x0B\x0C\x0E-\x1F"'<>\x7F])/&#${ \ ord $1 };/g;
  $str;
}
sub uri_escape {
  my $str = $_[0];
  $str =~ s/%(?![0-9A-Fa-f][0-9A-Fa-f])/%25/g;
  $str =~ s/([\x00-\x20"'<>\\^`{|}\x7F-\xFF])/ sprintf '%%%02X', ord $1 /eg;
  $str;
}
$i =~ s{ \[\[ (.+?) \]\] } {
  my($url, $face) = ($1, $1);
  $url = uri_escape($url);
  $face = html_escape($face);
  qq|<a href="$url">$face</a>|;
}egx;

602 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:40:50 ]
>>601

すみません、
実はurl_encは誰かから教えてもらったもので丸写しなんです ^_^
でも今回のことでやっともろもろ判りました。

コード、参考になります(というかありがたくいただきます)。
ありがとうございます。

603 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 05:49:41 ]
JavaのプログラムからCGIを実行しようとしたのですが、302エラーが返されます。
何故なんでしょうか?

604 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:21:39 ]
>>603
302 はエラーじゃないし Perl の話でもない。
www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec10.3

CGI: Common Gateway Interface part 13
pc11.2ch.net/test/read.cgi/php/1126436361/

605 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:22:39 ]
Moved Temporarily



606 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:38:15 ]
>>604-605
パーミッションの設定をしたら動きました;;
お騒がせしました

607 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:23:38 ]
perlのuntil文っていらないと思うんですけど、皆さんどんなときに使ってますか?

608 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:30:42 ]
使わなきゃいいじゃん

609 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:00:16 ]
while (! hoge)よりも直感的に書ける場合もある気がする
とくに後置したときに英文っぽくておさまりがいいような

610 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:23:51 ]
while ( !( ... || ... && ... || ...) )
とかになったらさすがに使うw

611 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:26:43 ]
あー、あと成功したら0エラーならエラーの種類が1以上って関数が
成功したらとにかく実行って時とかに == 0 とかやらなくて済むとか。

612 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:07:48 ]
>>609->>611
なるほど。参考になりました。
untilも使い道はいろいろあるんですね。

613 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:32:27 ]
意味的に「〜になるまで続ける」って感じの時も until のがわかりやすいかも

614 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:37:39 ]
>>613
確かに。これは考えたことなかったな。

615 名前:デフォルトの名無しさん [2008/03/06(木) 02:27:57 ]
XSでCライブラリを使ったモジュールを作ったが、
それが$HOME/local/libのライブラリを使っていて
CGIにLD_LIBRARY_PATHが設定できないのでモジュールで使っている.soが読めない。
$ENVとuse Envでやったが、無視されるみたいだし
共有サーバでhttpdがsuExecで動いているので.htaccessでSetEnvすることもできない。
DynaLoaderがロードする.soがリンクしているsoのパスを指定できる方法ある?




616 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:16:11 ]
>>615
ldの-Rオプションでバイナリに埋め込むのはどう?

617 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 19:32:32 ]
>>615
前スレの570〜580あたりで書き込みした者ですが、

DynaLoader.pmがLoadするだけならば、
use DynaLoader;
@DynaLoader::dl_library_path に、対象のPATHを放り込んでやればLoad出来ます。

その{perl_module}.soがよその(/use/lib,/lib以外の)ライブラリをロードするようにコンパイルされていたら、
多分 use した時点でエラーになります。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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