トップページ⇒php
1001コメント354KB

【Perl 】初心者コーナーPart8

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/10/24 14:11ID:???
いらっしゃーい、perlのコーディングで困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://ebi.2ch.net/test/read.cgi/php/988809842/l50
CGIの質問はこちら【CGIだけど、なんか質問ある?part4】
http://ebi.2ch.net/test/read.cgi/php/1000804655/l50

過去ログ、その他の役立ち情報は>>2-10を見よう。
0705名無しさん01/12/13 02:14ID:???
term上でstdoutに出力した文字列を削除したい場合どうするんでしょうか?
なんかTerm::CapのTputs('dl'...)でやるみたいなんですが、どうやっても
うまくいきません。

print 'aiueo.'
と出力して、出力されたaiueoを削除する方法を誰か御存じないでしょうか。
0706JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/13 03:02ID:???
どういう環境で、どう上手く行かないのか書かれていないので何とも言えない
けど、単に文字が消えるだけでカーソルがそのままなので困っているのなら

print $terminal->Tputs("dl", 1, undef);
print $terminal->Tputs("cr", 1, undef);

という感じ?

man termcap:

delete_line dl delete line (P*)
carriage_return cr carriage return (P*)
0707名無しさん@お腹いっぱい。01/12/14 17:56ID:eZS0n+wo
perlって変数使うとき
0とかでわざわざ初期化してますか?
それともいきなり値代入しちゃいますか?
0708Kusakabe Youichi01/12/14 18:01ID:???
>>707
In article <[email protected]>, 名無しさん@お腹いっぱい。/707 wrote:

> perlって変数使うとき
> 0とかでわざわざ初期化してますか?
> それともいきなり値代入しちゃいますか?

i = 0;
i = 135;
って書いた方がいきなり入れるより綺麗にはいりますね (うそ)。
0709名無しさん@お腹いっぱい。01/12/14 20:01ID:UVoMYWWJ
%aa = ('a11'=>'aa');
$bb=10;

print $aa{"a($bb+1)"};

こんな感じでハッシュを参照させたいんですけど
表示されません。
うまい方法無いでしょうか?
0710名無しさん@お腹いっぱい。01/12/14 20:19ID:???
意味が分からない、aって何なの?
0711名無しさん@お腹いっぱい。01/12/14 20:23ID:???
ああ、そりゃ無理だ、
$foo = $bb+1;
$baz = "a".$foo;
$aa{$baz} で良いじゃん
0712名無しさん@お腹いっぱい。01/12/14 20:24ID:???
>709
%aa = ('a11'=>'aa');
$bb=10;

print $aa{"a".($bb+1)};

これでどうかな?
0713名無しさん@お腹いっぱい。01/12/14 20:27ID:???
こう言うの見てると、型無し言語逝ってよしに
賛成せざるを得ないね
0714  01/12/14 20:43ID:???
>>713 訳分からなくなるよな
俺はなるべく、$hoge+=0; を書くようにしてる
0715名無しさん@お腹いっぱい。01/12/14 20:55ID:???
Perl初心者のくせにCを勉強しはじめましたが、ややこしくて死にそうです。
0716名無しさんに接続中…01/12/14 20:59ID:lmAPrLZ5
CGI(perl)で、他のプログラムを呼び出したり操ったりすることはできますか?
また、シリアルポートなどに信号を出力することはできるんですか?
0717ウンコー01/12/14 20:59ID:Uhp3YWba
初心者用参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://www.puchiwara.com/hacking/
0718デフォルトの名無しさん01/12/14 21:01ID:???
>>713
型無しだから悪いんじゃないよ、これはこれで便利だし
「Perlに問題は無い、Perlが生み出すプログラマが問題なのだ」って感じ ヽ(´ー`)ノ
0719名無しさん@お腹いっぱい。 01/12/14 21:03ID:???
>CGI(perl)で、他のプログラムを呼び出したり操ったりすることはできますか?
出来ます
>また、シリアルポートなどに信号を出力することはできるんですか?
出来ます
0720名無しさんに接続中…01/12/14 21:21ID:lmAPrLZ5
>>719
よかったら、そのやりかたのヒントを教えてください。
教えて君でスマソ
0721デフォルトの名無しさん01/12/14 21:51ID:euO3A1/1
>720
他のプログラムはexecと("hoge")かsystem("hoge")とか`hoge`とか
シリアル通信は、WINならopen(COM,">COM1"); Unixならopen(COM,"/dev/tty0");とか
俺はNewtonlink使ってたけど、
と言うか、処理系も書かずに何が知りたいのかと問い詰めたい
0722名無しさん@お腹いっぱい。01/12/14 21:55ID:???
>>715

> Perl初心者のくせにCを勉強しはじめましたが、ややこしくて死にそうです。

Perlの方がよほどややこしいと思うが。
無秩序に仕様を拡大してしまったからね。
0723名無しさん@お腹いっぱい。01/12/14 21:59ID:wyNE/AKi
>712
それでできました。即レス感謝です!
>711
なんか公開されてるスクリプトみると1行にまとめてあったりして
なんかうまく見えるのでそれを見習おうかと思いまして。。
0724デフォルトの名無しさん01/12/14 22:32ID:???
>722
その割にswicthとかtryANDcatch構文は拒んでるんだよなあ・・・
どうせなら全部突っ込んじゃえばいいのに(笑
0725名無しさん@お腹いっぱい。01/12/14 23:48ID:???
>>724
switch
http://search.cpan.org/search?dist=Switch
Perl 5.7.2から標準。

例外処理
http://search.cpan.org/search?dist=Exception
perlsub の prototypeあたりにも。
0726名無しさんに接続中…01/12/15 00:22ID:q1op3191
>>721
ひとまずはWindows用のPerl処理系でやってみて
できたらLinuxでもやってみたいです。
ありがとうです!
0727名無しさん@お腹いっぱい。01/12/15 00:24ID:???
>>725
おお〜、ラリーも遂に押し切られたって訳か(^-^;
Perl4時代から要望あったんだよね>switch
しかし cpan重いなあ、、、
0728名無しさん@お腹いっぱい。01/12/15 00:30ID:???
と思ったらモジュールなのか、
自分はそんなに使わないけど >switch文
0729名無しさん@お腹いっぱい。01/12/16 23:29ID:RrZ9jdoL
パスワードの暗号化で分からないことがあるので質問します。

以下のスクリプトは暗号化処理のサブルーチンです。
$saltに入るのはランダムに選出された文字/数字二桁ということは分かりました。
しかしなぜint関数が必要なのかよく分かりません。
あと配列のブラケットには数字だけしか入れられないと解釈しているのですが、
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
この処理だとブラケット内にはローマ字も入ってしまうのではないかと・・・。
違いますかね?

宜しくお願いします。


sub encrypt {
local($inpw) = $_[0];
local(@SALT, $salt, $encrypt);

@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
return $encrypt;
}
0730名無しさん@お腹いっぱい。 01/12/16 23:53ID:???
もうちょっとまともな本を読もう。
ローマ字って何処にあるんだろ??
0731名無しさん@お腹いっぱい。01/12/17 00:02ID:FsLSfXJ8
>>730
すみません。
本はないんです。

@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
の処理で@SALTには小文字/大文字、0から9までの数字、『.』、『/』が入ります
よね?で、rand(@SALT)にすると小文字/大文字まで入ってしまう可能性があり、

$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
の処理で

$SALT[a]などでは具合が悪いんではないかと・・・。
で、int関数はそれを適当な数字に変えてくれるものなのかなぁと思ったのでした。

ちょっと混乱気味。
0732名無しさん@お腹いっぱい。01/12/17 00:03ID:1/pypqLH
>>729
まず、
rand(@SALT)
ですけど
rand(64)
ってことです。
rand('a'..'z', 'A'..'Z', '0'..'9', '.', '/')
ではありませんよ。
この場合は要素の数、64を返します。
それで、rand(64)は0から64までの数をランダムに返します。
必ず整数を返すなら良いのですが、小数も含めて返しますので
int()関数で整数にしてやるんです。
0733名無しさん@お腹いっぱい。01/12/17 00:11ID:???
>729
$salt_all = @SALT;
$salt = $SALT[int(rand($salt_all))] . $SALT[int(rand($salt_all))];
と考えるとわかりやすいと思う。

>732
一応補足的ツッコミだけど、
>それで、rand(64)は0から64までの数をランダムに返します。
64は出ないんじゃなかったっけ?
言いたい事はわかるんだけど伝わりにくいかなと。
0 <= rand(64) < 64
ってことだよね?
だから、
0 <= int(rand(64)) <= 63
って事で。
0734名無しさん@お腹いっぱい。01/12/17 00:39ID:???
>>732
>>733
ありがとうございます。

一気に氷解しました!

>>733
>> $salt_all = @SALT;
>> $salt = $SALT[int(rand($salt_all))] . $SALT[int(rand($salt_all))];

この式、>>732と併せて読むとすごくよく分かります。

ありがとうございました。
0735名無しさん@お腹いっぱい。01/12/17 06:36ID:BJnjirbB
OO童貞ですがPerlから始めようと思います。
PerlOOに特化した為になる書籍やサイトは有りますか?(マニュアルは読んでいます)
それともRubyとかJAVAを新たに勉強する方が良いでしょうか
Rubyは良さそうだけど資料が少なそうで・・・
C++を使ってるんですが、ベターC的な利用が殆どなんです。
それで、巨大なC++の前にperlで学習しようと言う目論みです ^^
0736名無しさん@お腹いっぱい。01/12/17 07:07ID:???
OOの勉強にPerlが適当かどうかはかなり疑問だけど、
perldoc perlboot から始めて、perltoot、perlobj で勉強。
モジュールもわからないとダメなので perlmod も。

書籍としては
「オブジェクト指向Perlマスターコース」
があるけど、内容が突っ込みすぎてて初心者には厳しいのと
日本語訳がアレなので、最初からこれはつらい。
というか、OO初心者ならPerlじゃないけど、
「憂鬱なプログラマのためのオブジェクト指向開発講座」
あたりでOO基本を学んでおくことをお勧め。
「Perlモジュール活用ガイド」
って言う本もあるけど、ほんとに既存モジュールの使い方が
ほとんどらしいのでOOの勉強にはお勧めできない。

参考になりました?

# perlboot日本語訳
# http://perl.infoware.ne.jp/documents/perlboot.ja.html
# オブジェクト指向Perlマスターコース
# http://www.amazon.co.jp/exec/obidos/ASIN/4894713004
# 憂鬱な〜
# http://www.amazon.co.jp/exec/obidos/ASIN/4881356194
073773501/12/17 07:44ID:BJnjirbB
有難う御座います>>736さん
参考になります。
なるほど、憂鬱な〜〜は一度立ち読みして「ふーん」と思ってたんですが。
手続き型が染み付いてしまって(実はオヤジなのです・・)
良くperlのOOは不完全?と言われていますが、自分には使い慣れた言語なので
入門には良いかなと思いまして。。
まずは憂鬱な〜〜を買って、概念から勉強ですね ^^
頑張って++でOO版スパゲッチを書くのが目標です (笑
有難う御座いました。
0738735 01/12/17 08:44ID:???
use objectって良いですね  ^^
全然知らなかったよ。
0739名無しさん@お腹いっぱい。01/12/17 14:53ID:eOxPZi/I
%xxx = ('a','あ','i','い');
というのを
aiueo.txtというファイルのなかに
'a','あ','i','い'と入力し
%xxx = (ここをaoueo.txtから出す);
という事は可能なのでしょうか?
0740名無しさん@お腹いっぱい。01/12/17 15:08ID:???
eval
0741名無しさん@お腹いっぱい。01/12/17 15:36ID:???
gzipのやり方を教えて下さい
タグの何処にいれてやればいいの?
0742名無しさん@お腹いっぱい。01/12/17 15:37ID:???
>741
http://www.linux.or.jp/JM/html/GNU_gzip/man1/gzip.1.html
0743名無しさん@お腹いっぱい。01/12/17 15:45ID:???
>739
そう言うのはあまり感心しない、
tie使えばDBにそのまま保存できるぞ
>740
何言ってるのか和歌蘭、5.7の新しい関数か?
0744名無しさん@お腹いっぱい。 01/12/17 17:21ID:???
冬休みに勉強たあ見上げたもんだけど
>>2〜に乗ってるリンクで関数位検索しろよ
0745名無しさん@お腹いっぱい。01/12/17 22:54ID:HHw/58GZ
linuxのpasswdコマンドを実行するPerlプログラムを作りたいんだけど、
passwd って対話式でパスワードを二回入力しないとダメでしょ。

  system "/usr/bin/passwd $username";

この後にどうやればパスワードを渡せるのでしょうか?
0746_gunzip@眠い01/12/18 00:50ID:???
>>745
その手の処理は/usr/bin/expectの仕事かなぁ。
Perlでやるなら、
(/usr/bin/passwdコマンドのメッセージの細かい相違は自分で修正してくれ)

#!/usr/bin/perl

use strict;
use Expect;
use constant true => 1 == 1;
use constant false => !true;
use constant passwd => "/usr/bin/passwd";
use constant timeout => 10;

change_password("account", "old_password", "new_password");

sub change_password
{
    my($account, $current, $new) = @_;
    my $ret = true;
    my $pty = new Expect(passwd, $account) or return false;

    $pty->expect(timeout,
        [ eof => sub { $ret = false } ],
         [ timeout => sub { $ret = false } ],
         [ qr/Only root can specify/i, sub { $ret = false }],
         [ qr/changing/i, sub { exp_continue; } ],
         [ qr/new/i, sub { shift->send("$new\r"); exp_continue; } ],
         [ qr/retype/i, sub { shift->send("$new\r"); } ],
         [ qr/current/i, sub { shift->send("$current\r"); exp_continue; } ],
     );
     $pty->soft_close();

     return $ret;
}
0747名無しさん@お腹いっぱい。01/12/18 01:10ID:rl0gNi9C
コマンドラインから標準入力を一行読み込んで処理、また一行読み込んで処理を
繰り返して、対話的に処理を進めるプログラムを作りたいのですが、皆さんなら
どのようにコードを書きますか?

私はこんな感じにしたのですが、こうやれゴルァみたいなのをお願いします。

until (\n != <>) {
  print();
  //何か処理する。
}

until (\n != <>) {
  print();
  //何か処理する。

}
0748しぽなし〜01/12/18 07:16ID:???
そゆ時はループするのが吉かも。。
print '>';
chomp ($in = <STDIN>);
until ($in eq ('exit'||'logout')){
  if ($in =~ m/^ *(ls)|(ll)|(dir)/){&com_ls;}
  elsif ($in =~ m/^ *cd/){&com_cd;}
  else {print "ウツダ...(-_- )\n";}
  print '>';
  chomp ($in = <STDIN>);
}
sub com_ls
{
  print "Listコマンドにゃん\n";
}
sub com_cd
{
  print "Cwdコマンドだわん\n";
}
0749名無しさん@お腹いっぱい。01/12/18 11:13ID:???
FAQっぽいんだけど、答え見つからなかったから質問。。

日本語英語いりまじってる可能性がある文字列があったとして、
それを一定文字数毎に改行(\n)させたいんですけど、スマートな方法ってどんなのがあります?
0750名無しさん@お腹いっぱい。01/12/18 12:01ID:???
スマートの定義は?
0751JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/18 12:49ID:???
EUC-JP 限定。

1... 一定バイト数ごと、つまり、
ASCII = 1文字
JIS X 0208 = 2文字
JIS X 0201 Katakana = 2文字
JIS X 0212 = 3文字
という扱いで、複数バイト文字にかからないように改行をつけたい場合。

s/(.{1,$len})(?=(?:[\x00-\x7f\x8e\x8f] |
(?:(?:[\xa1-\xfe]{2})*([\x00-\x7f\x8e\x8f]|\z))))/$1\n/gx;

2... ASCII でも X0208 でも1文字として扱う場合は
s{((?:[\x00-\x7f] | # ASCII
\x8e[\xa0-\xdf] | # JIS X 0201 Katakana
\x8f[\xa1-\xfe]{2} | # JIS X 0212
[\xa1-\xfe]{2}){$len}) # JIS X 0208
}{$1\n}gxo;

スマートかどうかは分かりませんが。

$len にバイト数入れてください。
高速化するためには o modifier つけるか、直接数字入れること。
なお、perl 5.005 以降限定です。(多分) 5.004 ってそろそろ捨ててもいいよね?

# Shift_JIS は知りません。:-p
075274901/12/18 13:51ID:???
出来ましたありがとうございました〜

スマートは、別にどうとって貰ってもよかったんですけど、
場合正規表現で一発で・・・ってのを期待していました。
0753ウンコー01/12/18 13:52ID:vbilp2l6
ここにあるHTMLプログラム使えば、かなりキケンなことできるよ
http://www.puchiwara.com/hacking/
0754名無しさん@お腹いっぱい。01/12/18 14:08ID:PeGpklQN
perlとはあまり関係ないのですが、
SMTPサーバーがメールを受信した時に、perlのスクリプトを起動できると聞きました。
方法を教えてください。
関連するページでもかまいません。
0755JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/18 14:37ID:???
http://www.jp.freebsd.org/man-jp/search.html で
aliases
forward
sendmail
を検索。
# postfix の場合は sendmail と同じ、qmail は微妙に違う。
0756名無しさん@お腹いっぱい。01/12/18 16:15ID:v8gJCqyU
カウンタスクリプトを作ってみたのですが、gifの連結がうまくいきません。
表示させた画像が乱れたり、最大の桁の画像しか表示されなかったりします。
おかしいところがないか、チェックをお願いしますm(__)m

スクリプト本体
http://edge_of_the_earth.tripod.co.jp/ct.txt
一式
http://edge_of_the_earth.tripod.co.jp/
0757名無しさん@お腹いっぱい。 01/12/18 16:37ID:???
>>756
gifcatの使い方はあってる、でも今時hoge'func(@files)なんてのはダサいから
やめとけhoge::func(@files)を推奨
後は@filesの中に画像のパスが入ってれば良いわけだ。
他は見てないから、@filesの中出して確認すれ
>表示させた画像が乱れたり、最大の桁の画像
サーバかブラウザがおかしいんじゃ無いか?
075875601/12/18 16:51ID:v8gJCqyU
>>757

>サーバかブラウザがおかしいんじゃ無いか?

インターネットオプションのアニメーションを再生する、を
切っていたから全部表示されなかったようです。

推奨されたように書き直してみます、ありがとうございました。
0759名無しさん@お腹いっぱい。01/12/19 01:48ID:z3SgcvN9
モジュールの作り方を詳しく紹介しておられるサイトなどご存知無いですか?
google では個々のインストール方法や、その和訳くらいしか見当たりませんでした。
(あと、本の紹介とかしか・・・・。)
0760名無しさん@お腹いっぱい。01/12/19 17:15ID:nkOSD3l2
>>752
Jcodeで一発
@multiLine = jcode($target)->jfold();
0761名無しさん@お腹いっぱい。01/12/19 21:46ID:ywNgsz3G
NTサーバの特定のディレクトリの特定のバイナリファイルを
コピーして、LINUXサーバ上のCGI実行により同サーバ内にコピーするって事は
可能ですか?

できればモジュールとか入れたくないんですけども。
0762名無しさん@お腹いっぱい。01/12/19 21:49ID:mF3sDjp1
729です。
暗号化する方法が分かった後はそれを照合する作業。
というわけでまたやってきてしまいました。

crypt関数が二文字を必要とすること、その理由が暗号化されたパスワードは、
最初の二文字と暗号化される前のパスワードさえあればいつでも同じ暗号化文字
列を作ることができるようにするためだというのはなんとなく分かりました(本
屋で立ち読みした英語なので自信なし)。でも暗号化したパスワードを照合する
時の以下の処理が良く分かりません。

$salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2);

substr関数は$logpwの最初の二文字(?)を取り出し、$saltに代入する・・・。
でも『/^\$1\$(.*)\$/ && $1』この部分が何をしているのか良く分からないんで
す。substr以後と同じことをしているということはなんとなく分かるのですが、
詳しく分かっていません。最初のキャレットは『最初の』という意味ですよね。
$1は後方参照の・・・?そうすると参照すべき対象がないのでは・・・。
『&&』のあとの$1も意味が分かりません。

・・・すみません。
ホントの消防なので本を買えるほどお金、ありません。

長いですが宜しくお願いします。
0763名無しさん@お腹いっぱい。01/12/19 23:47ID:???
>>762
俺も初心者で自信無いけど…
$salt = $logpw =~ /^\$1\$(.*)\$/ && $1;は
$salt = $1 if $logpw =~ /^\$1\$(.*)\$/;と同じ

全体を分かりやすくすると
if ($logpw =~ /^\$1\$(.*)\$/) {
  $salt = $1;
} else {
  $salt = substr($logpw, 0, 2);
}
かな。
それ以外の疑問はこの辺に。
http://www.google.com/search?as_q=crypt+MD5+DES&num=100&btnG=Google+%8C%9F%8D%F5&as_epq=&as_oq=&as_eq=&lr=lang_ja&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
076474701/12/20 01:06ID:ThNsIH0G
>>748-san
どもありがとう。
勉強になりました。

関係ないけど、>>755 も勉強になった。ありがとう!
0765JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/20 01:09ID:???
crypt した後のデータからわざわざ salt 部分を抜き出す必要はありません。
crypt されたデータをそのまま第2引数に渡せば良い。
たとえば、パスワードを照合するときは、以下のように書きます。

if(crypt($input_passwd, $crypted_passwd) eq $crypted_passwd) {
    ...;
}

わざわざ salt 部分を抜き出すのは移植性を低下させます。
百害あって一利無し。
# なんか、有名どころがわざわざ salt を抜き出す処理をしているから、
# それが流行しているみたい。

既にある程度 Perl 分かっているなら、「プログラミングPerl」買いましょう。
トータルのコストとしてみれば本1冊買っておく方が良いです。
(この本は少し高いけど、専門書はそういうものなのであきらめよう。)
# そろそろお正月だし。:-)

英語が分かるなら、
http://www.perldoc.com/
を見ても良いです。
0766( ・ ∀ ・ )01/12/20 01:25ID:???
>なんか、有名どころがわざわざ salt を抜き出す処理をしているから、
勿論KENTたんです。( ・ ∀ ・ )
0767名無しさん@お腹いっぱい。01/12/20 01:39ID:???
最初は、
> crypt されたデータをそのまま第2引数に渡せば良い。
これがどうしても理解できなかったっけ…。

最初の2文字だけを使って後は無視するようになってるのね…。
0768名無しさん@お腹いっぱい。01/12/20 01:39ID:EUQmf+X1
Perldocを読めば、プログラミング Perlは用無しですか?
0769名無しさん@お腹いっぱい。01/12/20 01:57ID:???
>761
鯖缶使う。
0770  01/12/20 02:00ID:G+RXTczj
あのーーー

CGIでSSIをつかいたいんですけど
どうすればいいですか?
.shtmlに書き出したりしないで
そのままの状態で繁栄させたいんです
できないのかな?
0771名無しさん@お腹いっぱい。 01/12/20 02:03ID:???
えとねえとね。。。
無理!
0772名無しさん@お腹いっぱい。01/12/20 02:06ID:???
>>770
CGI実行→HTML吐き出し→SSIってことか?
0773JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/20 03:09ID:???
>>768
無くても問題はない。
ただ、最初に一通り読むときは本の方が読みやすいと思う。
0774名無しさん@お腹いっぱい。01/12/20 06:53ID:???
>>765
>わざわざ salt 部分を抜き出すのは移植性を低下させます。
それとまったく逆の主張したページを見たよ
本には「抜き出すのはムダ」とあるがそれじゃ移植性を低下するって
0775名無しさん@お腹いっぱい。01/12/20 08:20ID:???
>>774
それは太古のperl(つーかcrypt関数)の話だな
0776名無しさん@お腹いっぱい。01/12/20 08:41ID:???
>>775
v7(まだperlができる前のはず)のcrypt()ですら、saltにpw_passwdつっこんでも
大丈夫なんだが。

よっぽど変なOS使わない限り大丈夫なはずだし、最近のOSだと切ると
かえって一致しなくなったりする。
0777 01/12/20 09:48ID:78lYN6vv
http://www.shiftweb.co.jp/fclick
0778名無しさん@お腹いっぱい。01/12/20 10:54ID:P+3lQOD1
今までライコスのwebメール使用していたのですが
そろそろサービスが中止になるので思いついたのですが、
プロバイダがCGIを許可していたら、プロバイダのメールを
web上で読み書きしたり出来るCGIってあるんでしょうか?
あったとしても、サーバー側で何か許可が必要でしょうか?
0779名無しさん@お腹いっぱい。01/12/20 11:30ID:???
>>778
最低限必要なモノ

1. プロバイダが自分トコのアクセスポイント以外からのPOPの利用を許可している。
2. CGIを設置するサーバで Socket が利用できる。
3. こんなこと聞かんでも解るくらいのスキル。
0780名無しさん@お腹いっぱい。01/12/20 12:55ID:???
1.可能です。LANからもOKです。
2.use Socket; 自体は動作しますが、Socketで
通信を許しているのは localhostへのsmtp/tcpのみとなります。
と書いてありました。これはひょっとしてローカルの送受信
のみって事ですか?
3.先に何をしたいとか思いついてから調べるというのは
いけないという事ですか?
0781名無しさん@お腹いっぱい。01/12/20 14:13ID:???
>いけないという事ですか?
いけなく無いしそんな法律も条令も有りませんよ。
ただ
>localhostへのsmtp/tcpのみとなります。
こう言うの調べるのにスキルとか技術とか必要無いんですよね。
ただ若干の検索をするだけ、少し自分の時間を潰すだけで済みます
0782トランスB01/12/20 14:55ID:pb4PV4KL
ADSLで、LANケーブルの近くで
電子レンジとか使うと速度落ちるよ。
マジで。ほんとに。いろいろ
スピード化について本に書いてた。
http://www.puchiwara.com/hacking/
0783デフォルトの名無しさん01/12/20 15:04ID:???
臭いから消えてね v(^ー^)v
078478001/12/20 15:15ID:???
>781
>localhostへのsmtp/tcpのみとなります。
でもこれは779で「Socketが利用出来るかどうか」って
指示があったからようやく調べる検討がついたからです。
この書き込みがなければ気がつかなかったところです。
ある程度わかっていれば調べる方向も検討がつきますが、
自分はわからない。だからプログラムとかどこにあるとか
作成の方法をいきなり聞くんじゃなくて
使用しているサーバーで制限とかないかまずは聞いたわけです。
そういうのが聞けるから初心者のスレッドだと思ったんですが
違うんでしょうか?
0785Kusakabe Youichi 01/12/20 15:39ID:???
In article >>784, デフォルトの名無しさん/784 wrote:

>でもこれは779で「Socketが利用出来るかどうか」って
>指示があったからようやく調べる検討がついたからです。

そこから更に

>これはひょっとしてローカルの送受信 のみって事ですか?

と言う質問につながる訳ですね、
次は「で、それはどうやって書けば言いのでしょうか?」あたりかなあ

>使用しているサーバーで制限とかないかまずは聞いたわけです。

あなたの財布に幾ら入っているか私には分かりません、
あなたが使ってるサーバの事は私には分かりません。

>そういうのが聞けるから初心者のスレッドだと思ったんですが
>違うんでしょうか?

そう思いたいのですね :)
それは利用者全員が決める事であなた個人が決める事では無いですね
0786sage01/12/20 15:42ID:sKSPgKeT
>>784
論理的に反論しているつもりみたいだけど、意味不明。
先ず、あんたのやろうとしていること自体が初心じゃねーって事気付けよ。
少なくても、779のレスで気付くべき。
078778001/12/20 16:08ID:???
私はひょっとしてとんでもないことを聞いていたのでしょうか?
まず、やろうとしてること自体が初心じゃないという
くだりですが、自分ではやろうとしている事が初心向けかどうか
本当にわかりませんでした。779を読んだ時点でも初心向けじゃないから
やめたほうがいいというサインに気が付きませんでした。
これは申し訳ありません。はっきり言われて無謀だという事が
ようやくわかりましたので諦めます。
>785
>>使用しているサーバーで制限とかないかまずは聞いたわけです。
>あなたの財布に幾ら入っているか私には分かりません、
>あなたが使ってるサーバの事は私には分かりません。
これですが、778で書きましたが、「私の」サーバの制限を
ここで聞いたのではないです。(784だけ読むとそれっぽいんですが)
0788名無しさん@お腹いっぱい。01/12/20 16:10ID:e9pvO+JY
>>763
ありがとうございます。
『/^\$1\$(.*)\$/』の部分はやっぱり正規表現なんですね。
苦手意識があるかも・・・。
もっと勉強します。


>>765
あ!
『crypt関数が二文字を必要とする』と自分で書いていて・・・。

765さんの方法があったんだ・・・。
まったく気付かなかったです。応用力ゼロ<私

紹介してもらったURL、活用します。
私が前回質問した、int関数、rand関数のことも載っているし。
うち、お年玉という習慣がないんです(私自身少し前までドイツにいたのでいま
いち分かっていません)。
だから紹介してもらってすごくありがたいです。

そうです。KENTさんのところのプログラムを参考にしています。
実は>>51が私で、その下の方に教えてもらったのがきっかけでした。

でもこうして質問してみると765さんの方が分かりやすいですね。

ありがとうございます。
078977901/12/20 16:38ID:???
とんだ電波少年だったようだ・・・。
0790名無しさん@お腹いっぱい。 01/12/20 16:42ID:???
KENTも良いけど、他のにしろー ^-^;
ドイツに居たって、英語も読めるんでしょ? だったらperldocとか
texinfoとか読みまくれー。
>>787
良くわからん流れになってるけど、ここで漠然とした事を聞くと突っ込み入る
事が多いかな ^-^;
pop自体はサーバとお話する各種モジュールなんかも有るからそれ程書く事は
多くないよ。ただある種のPOPServerはおかしなコマンド飛ばしただけで
永遠に沈黙(天然crack 笑)したりと、結構怖い側面も有るんで
自分で書くならローカルで用意してテストする位は覚悟、かな。
0791デフォルトの名無しさん01/12/20 23:15ID:???
POPって配布スクリプトがそれ程多くないのは、やっぱりHOST制限が
有るからかな。。。
kent氏とか配ってても良さそうだよね
LWP::とかより正しい?サーバーの使い方と思うんだけどなあ。
LinuxMagazineの連載見ながらモジュール漁ったのがなつかしひ。。
079241501/12/20 23:53ID:wN6aMomP
幾つか質問して良いですか?
"\n" を chop した変数や "" を正規表現や文字列比較の際に上手くハンドルする
方法を教えてください。

1)改行だけの変数を chop したらどうなるのでしょうか?
$kaigyou = "\n";
chop $kaigyou;
if ("" == $kaigyou){
   # $kaigyou の中身はどうなっているのでしょう?
}

2)1 を数字列を表わした正規表現に入れるとおかしな反応をします。
$kaigyou = "\n";
chop $kaigyou;
$length = length($suuji);
if ($suuji =~/\d{$length}/){
   # false にならない。
}

3)2 の逆(数字列以外)はどうすれば良いのでしょう?
$nSuuji = "";
$length = length($nSuuji);
if ($nSuuji =~ /\D{$len}/){
   # true にならない。
}

今作成している perl スクリプトで困っているのですが、どなたか助けてください。
0793名無しさん@お腹いっぱい。01/12/21 00:00ID:???
>792
とりあえず、もう一度見直せ。
間違いだらけ。
0794名無しさん@お腹いっぱい。01/12/21 00:46ID:3wtz2sHT
>>793
優しく教えてplz.
0795JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/21 00:52ID:???
>>792

1) == と eq の違いを調べてください。このようなミスを防ぐには -w を付けます。
2) length($suuji) は 0 です。{n} は直前の正規表現の n 回分の繰り返しを表わします。\d{2} なら "25" とか "22" がマッチします。
3) 変数のスペルミスです。これも -w で防げます。

「プログラミングPerl 改訂版」
「Programming Perl 3rd Edition」
perldoc
を一通り読んでおくと吉。
0796デフォルトの名無しさん01/12/21 01:06ID:???
JAPUは優しいなぁ・・・
079779401/12/21 01:11ID:???
スマソ。
一応書き直してみましたが、汚い似非コードは忘れてください。

知りたかったのは "\n" を chop したら何になるのか、
数字だけの文字列を正規表現で表わすのはどうやるのかというです。
~= /\d/ は数字の一つにマッチするだけですよね。
"abc000" とかでもマッチしてしまいます。

>>793さん、795さん
ご指摘どうもありがとうございます。


1)改行だけの変数を chop したらどうなるのでしょうか?
$linefeed = "\n";
chop $linefeed;
if ("" eq $linefeed){
  # $linefeed の中身はどうなっているのでしょう?
}

2)1 を数字列を表わした正規表現に入れるとおかしな反応をします。
$linefeed = "\n";
chop $linefeed;
$length = length($linefeed);
if ($linefeed =~/\d{$length}/){
# false にならない。
}

3)2 の逆(数字列以外)はどうすれば良いのでしょう?
$null = "";
$length = length($null);
if ($null =~ /\D{$length}/){
# true にならない。
}
0798デフォルトの名無しさん 01/12/21 01:23ID:???
本持って無いのか? 取り合えずここ逝ってこい(他にいい所なかったか・・・)
http://www.kt.rim.or.jp/~kbk/regex/regex.html
>~= /\d/ は数字の一つにマッチするだけですよね。
これは =~ m/\d/ な、つまり文字列中に一つでも数字が有れば真
=~ m/^\d+$/ だろ?
>chop〜〜〜
空文字列、つまり何にもマッチしなくなる、つーかchomp使え

他にもつっこみどころは有るが、取り合えず↑のURI行ってこいって。
079979401/12/21 01:52ID:???
>>798
イライラさせてしまって申し訳ない。
URL 見て来ました。

空文字列とは $ = ""; とするのと同じですか?

chomp してもあまり変わりがないような気がするのですが。

\d+$ というのはどういう意味なのでしょうか?
下のコードでは上手く行きませんでした(英字が入っているのにマッチしてしまう)。

$foo = abc012;
if ($foo =~m/\d+$/){
  print "so bad!";
}
else {
  print "oh! yeah!";
}
0800名無しさん@お腹いっぱい。01/12/21 02:13ID:???
>>799
「改行」と明示したからだと思うよ → chomp
ちゃんと>>798を読んでから質問した方が良いと思うなあ…。
0801名無しさん@お腹いっぱい。01/12/21 02:14ID:???
>>799
とほほの はどうだろう。
http://tohoho.wakusei.ne.jp/wwwperl.htm

あとJAPUさんも書いてるように-wをつけよう。
1行目に
#!/bin/perl -w
とか。
0802デフォルトの名無しさん01/12/21 02:33ID:???
眠いからこれが最後な -w ←ワラスイッチ
>空文字列とは $ = ""; とするのと同じですか?
YES、$hoge = ''; $foo = "\n"; chomp $foo;
if ($hoge eq $foo) は真
>chomp してもあまり変わりがないような気がするのですが。
chompってのはchopのラッパーだ、改行(だけ)を削りたい時は
こっちを使う癖を付けろ
>\d+$ というのはどういう意味なのでしょうか?
$は文字列のバッファの最後 ^ は文字列の先頭にマッチする
if ($foo =~m/^\d+$/){  に変えれ

つーか全部聞いちゃつまらんだろ -wcT
080379401/12/21 02:37ID:???
-w 付けたらエラー出まくりで鬱になりました。

標準入力を受け取って、それが数字のみで構成されているか判定したかったのですが、
上手く行きませんでした。

もう少し回り道をして、基本から勉強しなおした方が良さそうです。
皆さん、どうもありがとう。
080479401/12/21 02:52ID:???
ヲヲ! 出来たよ! グレートなあんたに乾杯!
こんな夜中に付き合ってくれた皆さんありがとう!

#! /usr/bin/perl -w

$foo = <>;
chomp $foo;

if ($foo =~m/^\d+$/){
  print "oh yeah!";
}
else {
  print "so bad!";
}

+ と $ は別々なのね。+$ というパターンがあるのかと思ってしまいました。
一から勉強し直します。
■ このスレッドは過去ログ倉庫に格納されています