CGIに依存しないPerlの話題一般
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/31(木) 21:49ID:bKRSBFew・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)
についてマターリと語り合うスレッドです。
#CGI関連の話題は、なるべく専用スレッドで。
0296ああああああああああああ
01/09/29 13:23ID:???0297ぽおおおおおおおおおおおおおお
01/09/29 13:28ID:????どれくらいの事ができたら「上級者」といえるのでしょうか?
??????????????????????????
0298名無しさん@お腹いっぱい。
01/09/29 14:18ID:???0299名無しさん@お腹いっぱい。
01/09/29 15:23ID:???あのねぇ、この板は人少ないから何か書いたからって2.3分でガリガリレス
付かないの、何回も同じ事書かないでくれるかな?
Perlコミュニティーに貢献出来ればもう初心者では無いでしょう、それはモジュールの
提供とかでも良いし、BBSで誰かの質問に答えてあげる事でも良い、
質問する側であったとしても、その問題の展開と結果を書くことが出来れば
それは後に続く人にとって役立つかも知れない。
「ああ、ネットが有るから助かってるなー、本だけじゃもっと手間取ってただろな・・」
こんな風に感じる時がきっとある筈、
つまり、
「ちょうだい!!!」「おしえて!!!」「はやくしてください!!!」
「??????」
こう言う人と正反対の行動をとれば良いんです。 解りやすいですね?
0301Perlあまちゅあ
01/09/29 20:23ID:9wErUD8Y思ったのですが、こちらの方に質問させてもらいます。
文章でいうよりも、見ていただいたほうが話が早いと思うのですが、
例えば、「とほほ」氏のページをGOOで検索しますと、
http://search.goo.ne.jp/search/search.jsp?MT=%A4%C8%A4%DB%A4%DB&SM=MC&DC=10&FR=1&IM=1&BOPE=88&LEVEL=8
となります。ページをよくみると、それぞれのWEBの小さなスクリーンショットがあります。
ロボット自動巡回時(もしくは巡回で集めてきたサイト)を自動でスクリーン
ショットで撮っていると思うのですが、こういうのってどのようにやるのでしょう?
スクリプトで、URL を Netscape などに投げて、それをImageMagickで
加工すれば何とかなる気がするのですが、それでは、常時Xを立ち上げている
必要があり、WEB上で使うには今一つです。(というか普通ほとんどのサーバは
Xは立ち上がってないので。。。)
何か視点を切り替えて、Perlでこう言う風にすればああいうのが実現できるのでは?
というのがあれば、アドバイスいただきたいです。
よろしくお願いします。
0302名無しさん@お腹いっぱい。
01/09/30 00:15ID:???wget で画像を DL したら Perl の ImageMagick モジュールか GD モジュールで縮小。
X 使わなくても全てスクリプトの中だけで済む。
0303名無しさん@お腹いっぱい。
01/09/30 00:18ID:???ネタか?
0304名無しさん@お腹いっぱい。
01/09/30 03:41ID:???mozillaのレイアウトエンジンでGeckoってのがあると聞いたけど
あれはPerlから呼び出したりできないのかなー。
#mozilla.orgのGeckoのページ見てみたけど全然わからず。
0305_gunzip@寝よう
01/09/30 05:21ID:???ImageMagickの'convert'コマンドはHTMLファイルを読み込んで任意の画像フォーマットに
変換できる。その際サイズ指定でもしてやればいいのではないかな。
...とはいえ、かなり重たい処理ではあるね。しかもレイアウトは(?)
詳しくはman convertかな。
むかし、こんなソフトもあったなぁ。
http://www.vector.co.jp/magazine/softnews/990225/n9902255.html
-------
ちなみに、html2ps(HTML->PostScript/Perl)を介して変換するのもいいかな。
http://www.tdb.uu.se/~jan/html2ps.html
# ....ただ単にスクリーンショットを取るならxwd, ImageMagickのimportコマンド
# で十分なのだが。...Xを起動せずに、か。
0306_gunzip
01/09/30 14:50ID:???#...ていうか、SetFontFace()無視されてるような。
0307名無しさん@お腹いっぱい。
01/09/30 14:53ID:PUFRmjNwsyscall.ph をreqireして、引数をpackして、
SYS_hogehoge
とかやってるけど、凄く便利
Posixモジュールつかってもいいんだけど、それには存在しない
システムコールもあるんで、
Perlのプログラミングには必須だね
0308名無しさん@お腹いっぱい。
01/09/30 15:14ID:???ImageMagickスゲー。そんな機能もあったんですか。
>...とはいえ、かなり重たい処理ではあるね。しかもレイアウトは(?)
この部分が気になるけど(w
でも実際、HTMLもXHTMLもJavaScriptも自力ですべて解釈して
ちゃんとレイアウトするってのは、もはや一大プロジェクトが
必要でしょうなあ。
305のベクタにあるやつはIEコンポーネント使ってんのかな?
0309262
01/09/30 15:45ID:FsOWX/IM一応、メニューとかステータスバーは大丈夫なんだけど、
その他はダメっぽいですね。日本語さえ何とかなればすごく面白そうなのに・・・
http://lists.wxwindows.org/pipermail/wx-users/2000-June/002733.html
中心人物はほとんどマルチバイトに関する知識がないっぽいですね。
0310301
01/09/30 16:56ID:hjeInKdw皆さんいろいろなご意見ありがとうございます。とても勉強になります。
302 さん、 305の_gunzip さんのご意見を参考にして、さらにトライ
してみようと思います。
良い結果が出たらご報告させていただきます。
他にも何か良い案など、思いついたことなどありましたら、
随時、アドバイスを下さい。
0311名無しさん@お腹いっぱい。
01/09/30 23:10ID:???0312_gunzip
01/10/02 17:23ID:???ありゃりゃ。残念。開発者側にマルチバイト対応を期待するのはちょっと無理なようですね。
ところで、今日立ち読みした「Linuxデベロッパーズバイブル」のPart3「Xプログラミング」で
60ページほど割いてGtk-Perlの利用例が解説されていますね。これを機に利用者が増えるといいのですが。
#そういえば、Gtk-Perlのチュートリアル/リファレンスの日本語訳途中までやってほったらかしにしてたな...。
0313_gunzip
01/10/02 17:27ID:???STLクラスPerlStringなんかも有りますよん。
http://www.youell.com/matt/perlstring/
0314名無しさん@お腹いっぱい。
01/10/02 23:19ID:???標準stringクラスに軽くラッパかませただけじゃないすかー。
でも、To-Do Listに
- Regular Expression support.
と書いてますね。それやってくれたらまじ大喜びです。
#似たようなことやろうとしたけど知力気力不足で挫折
0315_gunzip
01/10/03 01:39ID:???うわ、申し訳なひ。「こんなものがあるんだなー」って中身を見ずに張ってもた。
今度から気をつけます...。
ちなみに、自分がC言語から正規表現を扱うときは、
---------------------------------------------------
PCRE - Perl Compatible Regular Expressions
http://www.pcre.org/
---------------------------------------------------を使っていますよい。ちょっと例を挙げると、htmlファイルから<a href="...">のリンクを抽出したいな、というとき、Perlでは、
perl -ne "/<a[^>]+?href\s*=\s*[\"']?([^\"' >]+?)[\"']?>/ and print qq|\$1\n|" < hoge.html
のように書きますが、PCREを利用してC言語で書くと、
0316_gunzip
01/10/03 01:41ID:???#include <stdio.h>
#include <stdlib.h>
#include <pcre.h>
#define BUFSIZE 1024 * 8
/*
* cc -Wall -ansi -o exturl exturl.c -lpcre
*/
static const char *pattern = "<a[^>]+?href\\s*=\\s*[\"']?([^\"' >]+?)[\"']?>";
int main(void)
{
pcre *regex;
int *ovec, ovec_size;
int i;
int rc;
const char *error;
int error_offset;
char buf[BUFSIZE];
if ((regex = pcre_compile(pattern,
PCRE_CASELESS,
&error,
0317_gunzip
01/10/03 01:42ID:???NULL )) == NULL) {
fprintf(stderr, "regular expression %s\n"
"compilation failed at offset %d: %s\n",
pattern, error_offset, error);
exit(EXIT_FAILURE);
}
pcre_fullinfo(regex, NULL, PCRE_INFO_CAPTURECOUNT, &ovec_size);
ovec_size = (ovec_size + 1) * 3;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
rc = pcre_exec(regex,
NULL,
buf,
0318_gunzip
01/10/03 01:42ID:???strlen(buf),
0,
0,
ovec,
ovec_size);
for (i = 1; i < rc; i++) { /* $1, $2 を表示 */
const char *strptr;
pcre_get_substring(buf, ovec, rc, i, &strptr);
puts(strptr);
pcre_free_substring(strptr);
}
}
exit(EXIT_SUCCESS);
}
0319名無しさん
01/10/03 01:49ID:???それって、c言語でも、ふつうに性器氷原ライブラリincludeするだけで
いいのでは?
unixだったらosについてくるし、なければ
bsd、lgpl/gpn、pdsとかであるライブラリ使えばいいだけだし
0320_gunzip
01/10/03 01:57ID:???もちろん、<regex.h>(POSIX)をincludeしてregcomp, regexec等を利用する方法くらいは知ってますよい。他にもGPL rxとかありますし。
0321名無しさん@お腹いっぱい。
01/10/03 02:26ID:???自分もこれから勉強してみたいんだけど、
pcreとregexってどっちを最初に体験するのがいいんでしょ。
それと、上の2つは実行時に動的に正規表現を展開するようだけど、
flexみたいに正規表現をCのソースに変換するタイプも
いいかなと思ってたり。
#なんかPerlの話からずれまくりsage
0322名無しさん@お腹いっぱい。
01/10/03 03:17ID:wb1t8L8o0323名無しさん@お腹いっぱい。
01/10/03 03:25ID:wb1t8L8o沿い得て!
沿い得て!
沿い得て!
沿い得て!
沿い得て!
沿い得て!
0324名無しさん@お腹いっぱい。
01/10/03 03:32ID:Vd5CqKFkびっくりした。
0325名無しさん@お腹いっぱい。
01/10/03 04:37ID:???ためしに作った多倍長計算機↓
use strict;
use Math::BigInt(':constant');
my $a = "式を入力すると計算します";
while (1) {
print "$a\n> ";
eval '$a=' . scalar(<>);
if ($@) { ($a = $@) =~ s/ in use at.*//s }
}
同じようなことをMath::BigFloatでやるのは無理?
0326名無しさん@お腹いっぱい。
01/10/03 05:13ID:wb1t8L8o0327名無しさん@お腹いっぱい。
01/10/03 05:15ID:wb1t8L8o03281
01/10/03 05:17ID:7eUT1aME0329名無しさん@お腹いっぱい。
01/10/03 06:46ID:wb1t8L8o0330名無しさん@お腹いっぱい。
01/10/03 06:46ID:wb1t8L8o0331名無しさん@お腹いっぱい。
01/10/03 07:09ID:wb1t8L8o0332名無しさん@お腹いっぱい。
01/10/03 07:41ID:???環境くらい書けや。
0333名無しさん@お腹いっぱい。
01/10/03 11:37ID:???電波は放置でお願いします。
0334>>319
01/10/07 18:14ID:???まさか一発変換できたんじゃないだろうね・・・
0336名無しさん@お腹いっぱい。
01/10/08 02:29ID:???0337(´Д`)
01/10/08 21:54ID:m2.b6EVccでいうscanfみたいの使いたいんですが、
どうやらそれに相当するのはperlには無いらしいのです。
そこでその役割を果たすものを実装するらしいのですが
わけわかりません。
どうすれば良いのでしょうか?
0338名無しさん@お腹いっぱい。
01/10/08 22:22ID:???0339(´Д`)
01/10/08 22:42ID:???いやすみません。文章が悪かったです。
perl2exe使って実行形式にして使ってるんですが
scanfみたいので変数に値をその時々で与えたいんです。
けどscanfみたい関数が無いらしいのです。
どすれば良いでしょうか?
0340名無しさん@お腹いっぱい。
01/10/09 00:22ID:???0341名無しさん@お腹いっぱい。
01/10/09 00:35ID:???馬鹿ですか?
0342名無しさん@お腹いっぱい。
01/10/09 02:02ID:???print '名字を入力してください:';
chomp($name1 = <STDIN>);
print '名前を入力してください:';
chomp($name2 = <STDIN>);
print "こんにちは,$name1$name2さん";
これでいかない?
0343(´Д`)
01/10/09 02:34ID:???ありがとうございます。
scanfそのものに感じるけど
↓MLより引用
> scanfはパールではどのように記述するのでしょうか?
相当するものはありません。scanfのperl版を実装する必要があります。
これはどういう事だったんだろ?
0344(´Д`)
01/10/09 02:37ID:???cgiとして実行したらどうなんのかな?
と思って試したらやっぱり500エラーになるんですね。
勉強になるです。
0345名無しさん
01/10/09 02:52ID:???そのものではないってことなんじゃないの。
printfの入力版見たいな感じのもので。
scanf自体殆ど使わないのでよくわからんけど。
0346名無しさん@お腹いっぱい。
01/10/09 02:57ID:???0347名無しさん@お腹いっぱい。
01/10/09 02:59ID:???その辺は関係ないのかな?
0348名無しさん@Windowser
01/10/09 11:19ID:???goto search.cpan.org;
0349名無しさん@お腹いっぱい。
01/10/09 12:01ID:o6HwRMHEモジュール取ってこれない・・・。
www.cpan.orgのほう、いまサーバ落ちてます?
0350名無しさん@お腹いっぱい。
01/10/09 13:06ID:???0351名無しさん@お腹いっぱい。
01/10/09 14:25ID:???他の言語触れ w
0352名無しさん@お腹いっぱい。
01/10/09 15:59ID:???0353名無しさん@お腹いっぱい。
01/10/09 16:34ID:???それとも、その地点まで実行されて初めて読まれるの?
0354名無しさん@お腹いっぱい。
01/10/09 16:51ID:???たしかこっちが正解。
0355名無しさん@MZ-2000
01/10/09 17:20ID:khTqWun.if ($expression) require 'jcode.pl';
とかもできる。
0356名無しさん@お腹いっぱい。
01/10/09 17:34ID:???何故かわざわざjcode捨てて設置する困ったちゃん対策
0357名無しさん@お腹いっぱい。
01/10/09 17:40ID:???待て待て、二人ともそれじゃダメだって!
>>355
require 'jcode.pl' if $expression;
>>356
Dispmes('jcode.plを入れてください') unless eval{ require 'jcode.pl' };
0359名無しさん@MZ-2000
01/10/09 18:22ID:???0360名無しさん@お腹いっぱい。
01/10/12 08:48ID:6IAcQL0kWin32版のパッチの当て方が分かりません。
UNIX版のパッチの当て方しか見当たらないのですが、もしかしてWin32では
日本語使用不可ですか?
0361名無しさん@お腹いっぱい。
01/10/12 14:06ID:3886ncd2http://www.mikeneko.ne.jp/~lab/perl/tuning/
こういう内部的なことを書いた日本語の文書ってあまり見ませんよね。
_gzipさんやJAPUさんあたり、暇な時に書いてくれないかなぁ。
自分も英語とCのソースが読めれば良いんだが…ドッチモダメナンデスヨ。
0362JAPU@見知らぬ国のトリッパー ◆dcddJAPU
01/10/12 14:54ID:???たまに必要に迫られてソースを参照しますが、この手の解説は多分できません。
# JAPUTeX. ってトリップも捨てがたいな。
0363名無しさん@お腹いっぱい。
01/10/12 17:34ID:???0364名無しさん@お腹いっぱい。
01/10/12 21:49ID:???そうなんですか。失礼しました。
ヘタレの私には「ソースを参照できるレベル」の方々はみな同じに見えてしまうのです(笑
0365名無しさん@お腹いっぱい。
01/10/14 07:12ID:RJZp9XsPMacPerl 5.6.1b1
http://dev.macperl.org/
0366365
01/10/14 08:57ID:???0367名無しさん@お腹いっぱい。
01/10/15 22:34ID:???gunzipさんが好きそうな話題ねん。
そいった蘊蓄聞きたい上げ。
0368名無しさん@お腹いっぱい。
01/10/15 22:54ID:???カスタムウィジェットの作り方知りたいのだけど。
0369名無しさん@お腹いっぱい。
01/10/16 03:09ID:4v7IUtKcPerl/TKを使ったことのない俺が言うのもなんだが
Tk::UserGuideやTk::Widgetのドキュメントは読んだのか?
0370名無しさん@お腹いっぱい。
01/10/18 12:51ID:???3-D Stereogram, Self replicating source.
http://www.perlmonks.org/index.pl?node_id=118799
変態すぎ。
0371名無しさん@お腹いっぱい。
01/10/18 13:16ID:???何なのそれ。
0372名無しさん@お腹いっぱい。
01/10/18 13:39ID:???それも自分のソース使って表示。
で、そのステレオグラムであるところのPerlソースもそのまま動く。
アホ過ぎ。
0373名無しさん@お腹いっぱい。
01/10/18 13:41ID:???0374名無しさん@お腹いっぱい。
01/10/19 01:06ID:???0375名無しさん@お腹いっぱい。
01/10/19 01:35ID:JPPt49tbすげー。すごすぎー。ソースそのままと実行後で
ステレオグラムのパターンが変わるでしょ?
それでもスクリプトがちゃんと動くのはなぜ?
セミコロンで調節してるんか?
もちろんコードを読む気はないが。
0376名無しさん@お腹いっぱい。
01/10/19 01:59ID:???そんでもって、実行結果の出力を更に実行すると自分自身への写像になってる。
う〜む。
0377名無しさん@お腹いっぱい。
01/10/19 02:12ID:???その2番目以降みたいな、いわゆる「不動点プログラム」なら、
まだわかるんですよー。
オリジナルと1回目の実行結果はパターンが違うけど
ソースコードはきっちり長方形に整形されてて、
それでも動作する。ほんと、よくやるよって感じ。
0378名無しさん@お腹いっぱい。
01/10/19 03:15ID:???monksの中彷徨ってれば何か面白いのあるかなぁ....
0379名無しさん@お腹いっぱい。
01/10/24 14:12ID:???意外とやってることは単純。
>>375 が言う、実行後でステレオグラムが変化するというのはどいうこと?
・実際のコードは各行の14文字目まで(15文字目は削除用の目印)
・16文字目以降は15文字目までのコピー
・DATAのステレオグラムを使ってコピーするときに少し変化を加えている
0380名無しさん@お腹いっぱい。
01/10/24 14:14ID:???# Copyright (c) Marcus Post, <[email protected]>
use strict;
# 前準備
# 本来は DATA から読んでいるが書き換えたのでファイルから。
# という大人の理由からファイルポインタを__DATA__の次に移動しておく
open(MONKS, $ARGV[0]) or die "逝ってよし!";
1 until ($_ = <MONKS>) =~ /^_/;
# 以下、実際のコード
my(@dataAreaForWork, @codeArea, @charsOfCode);
# __DATA__以降を読み込む
my @dataArea = @dataAreaForWork = <MONKS>;
# コード部分を読みこむ
seek(MONKS, 0, 0);
@codeArea = <MONKS>;
# __DATA__以降を捨てる
until (($_ = pop(@codeArea)) =~ /^_/) {};
# '__DATA__'を追加
unshift(@dataArea, $_);
# 最初の3行(コピーライトとか)を出力
foreach (1 .. 3) {
print shift(@codeArea);
}
0381名無しさん@お腹いっぱい。
01/10/24 14:14ID:???foreach my $data (@dataAreaForWork) {
my @charsOfData = split(//, $data);
# 実際のコードは最初の14文字のみ
# 15文字目は後で削除するときの目印 |zY!%xQ のどれか
my $realCode = shift(@codeArea);
$realCode =~ s/(.{15}).*/\1/;
@charsOfCode = split(//, $realCode);
# 最初の15文字を後ろにコピーする。
# その際 DATA のステレオグラムを使ってちょっとランダマイズ
# 本当は以下のようになっているので区切り文字の , を . に変換している
# q,コード,;
# # ごみの削除とか
# eval;
my $i;
foreach my $oneOrZero (@charsOfData) {
$charsOfCode[$i + 15 - $oneOrZero] = (($charsOfCode[$i] eq ",") ? "." : $charsOfCode[$i]);
$i++;
}
# 空文字はひとつ前の文字をコピー
foreach my $i (1 .. 75) {
if ($charsOfCode[$i] eq '') {
$charsOfCode[$i] = $charsOfCode[$i - 1]
}
}
print join("", @charsOfCode);
print "\n";
}
print @dataArea;
0382Perl上級者
01/10/26 16:02ID:???0383名無しさん@お腹いっぱい。
01/10/26 16:28ID:???と
*fooGlob = *foo;
の違いを教えてちょ、上は$だけだ、とかじゃなくて
内部でどんな風にエイリアスされるのかが知り鯛DEATH
0384名無しさん@お腹いっぱい。
01/10/26 16:30ID:???吐き気して来た
死ね!!
0385 != 382
01/10/26 16:56ID:???0386 != 384
01/10/26 17:18ID:???彼は、〜〜級者、と言うキーワードに酷く敏感な様子 (p
0387名無しさん@お腹いっぱい。
01/10/26 17:42ID:???http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html#825
0388名無しさん@お腹いっぱい。
01/10/26 18:11ID:???0389名無しさん@お腹いっぱい。
01/10/27 00:20ID:e8mRTudG0390名無しさん@お腹いっぱい。
01/10/27 01:58ID:???0391名無しさん@お腹いっぱい。
01/10/27 18:37ID:???0392名無しさん@お腹いっぱい。
01/10/27 22:56ID:???0393Perl上級車
01/10/28 18:00ID:???0394名無しさん@お腹いっぱい。
01/10/28 18:57ID:xDgqA1mbってどうやってやるんですか?
0395Perl上級社
01/10/28 19:03ID:???0396仕様書無しさん
01/10/28 19:06ID:???1)
if($name eq 'tinko pinpin') {
cnt++;
}
--------と
2)
cnt++ if($name eq 'tinko pinpin');
をループさせて速度を測ったら
1)21 wallclock secs (20.95 usr + 0.01 sys = 20.96 CPU)
2)10 wallclock secs (10.23 usr + 0.00 sys = 10.23 CPU)
くらい違いますが、内部ではどのような処理の違いがあるんですか?
アホな私にも分かるように教えていただけませんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています