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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/01/18(水) 02:17:46ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0870nobodyさん2006/02/24(金) 08:17:49ID:???
全角の2バイト目が @ じゃなかったっけ?
0871nobodyさん2006/02/24(金) 10:45:19ID:???
UTF-8 使っとけばおk
0872nobodyさん2006/02/24(金) 10:59:30ID:???
もういい加減shift_jis関連の質問秋田
0873nobodyさん2006/02/24(金) 12:35:39ID:???
テンプレつーか診断フローチャートみたいのがあると良い気がする。

1. 日本語文字列を使っている: YES => 2, NO => 30
2. Shift_JIS を使っている: YES => 10, NO => 3
3. EUC-JP を使っている: YES => 5, NO => 4
4. UTF-8 ...

みたいな。
0874nobodyさん2006/02/24(金) 12:37:35ID:???
まあ、いいだしっぺが勝手にやってくれればよろしい。
使いやすければ使うし、そうでなければ無駄働きw
0875nobodyさん2006/02/24(金) 13:17:52ID:???
そうね。よさそうなら手伝うから873はたたき台よろしく。
0876nobodyさん2006/02/24(金) 13:49:15ID:???
多分やらないから、何度も同じ質問に答えればよろしいw
0877nobodyさん2006/02/24(金) 13:51:23ID:???
質問に答えず罵倒するということも可能。
0878nobodyさん2006/02/24(金) 13:55:04ID:???
テンプレ(できれば1)に
Shift_JIS のスクリプトにはお答えできません
0879nobodyさん2006/02/24(金) 15:59:44ID:hXh5LOuq
ググっても見つけられませんでしたので、
こちらで質問させて頂きます。

サーバのローカル上にある画像ファイルのMIMEタイプを
判別したいのですが、どうすればよろしいでしょうか?
GIFとJPEGが区別できるだけでいいです。
できることならモジュールとか使わず、
今のスクリプト上にシンプルに書きたいのですが。

08808792006/02/24(金) 16:03:26ID:hXh5LOuq
↑
画像のMIMEタイプって変ですね…。
画像のフォーマットの種類を判別したいのです。
よろしくお願い致します。
0881nobodyさん2006/02/24(金) 16:22:19ID:???
バイナリオープンしてヘッダを調べる
0882nobodyさん2006/02/24(金) 16:24:24ID:???
sub get_type{
  $file = $_[0];
  open (FILE, "$file");
  read (FILE, $data, 4);
  close (FILE);
  ($type) = unpack ("H4", $data);
  if ($type eq "ffd8") {
    $type = "jpg";
  } elsif ($type eq "8950") {
    $type = "png";
  } elsif ($type eq "424d") {
    $type = "bmp";
  } elsif ($type eq "4749") {
    $type = "gif";
  } else {
    $type = "知るかボケ";
  }
  return ($type);
}
0883nobodyさん2006/02/24(金) 16:45:12ID:???
ここって、口は悪いが何気にいい奴多いよなw
口悪くて性格も悪いやつもかなり混じってるけど。
08848792006/02/24(金) 16:53:33ID:hXh5LOuq
>>881,>>882
どうもありがとうございます。
画像なんて普段扱わないから、さっぱり?でした。

>>883
ほんとですねw
0885nobodyさん2006/02/24(金) 17:38:26ID:???
>882
特に問題は発生しないだろうけど、Win も考えるなら read の前に binmode を
0886nobodyさん2006/02/25(土) 01:58:25ID:qE7CF1Aw
どなたかお知恵をお貸しください。
外部ファイル呼び出しについて質問なのですが、呼び出し時に関数を
与えて呼び出す事は可能なのでしょうか?
ニュアンスとしましてはmain.cgiというソースの中に外部ファイル
(gaibu.cgi)を呼ぶ時にgetデータの送り方のように
require("gaibu.cgi?data=1");
としてgaibu.cgiへdata=1という関数を引き渡したいのですが・・・
main.cgiから渡されたdata=1というのをチェックして、gaibu.cgiの方で
main.cgiへ引き渡す関数を指定したいのですが。
妙な文章で申し訳ありませんが、どなたか宜しくお願い致します。
0887nobodyさん2006/02/25(土) 02:23:48ID:???
use 使えば?
0888nobodyさん2006/02/25(土) 02:28:14ID:???
エスパー待ちだなこりゃ
0889nobodyさん2006/02/25(土) 02:39:53ID:???
>>886
requireしてあんたが使う関数に、引数を渡してやれば良い。
0890nobodyさん2006/02/25(土) 02:48:36ID:???
最後の3行が名探偵も解けなさそう
0891nobodyさん2006/02/25(土) 02:54:14ID:???
「関数」と「引数」を混同している?
0892nobodyさん2006/02/25(土) 02:56:47ID:???
引数に戻り値のある関数を指定するって意味だろ
0893nobodyさん2006/02/25(土) 02:58:46ID:???
エスパーへの道程は長そうですが、

$ENV{"REQUEST_METHOD"} = "GET";
$ENV{"QUERY_STRING"} = "data=1";
my $data = `gaibu.cgi`;
0894nobodyさん2006/02/25(土) 05:08:43ID:???
>>886
そのスクリプトは、不特定多数がアクセスするような鯖に置くのかな?
0895nobodyさん2006/02/25(土) 05:10:53ID:???
>>893
> my $data = `gaibu.cgi`;

はつみみです。
0896nobodyさん2006/02/25(土) 11:37:16ID:JV6sbN7w
CSVファイル(最終行にだけ必ず特定の文字列XXXが含まれている)
を読み込んで、その最終行だけを行ごと削除して出力したいのですが
ググっていろいろ調べて試したんですがうまくいきません。
よろしくお願い致します。
0897nobodyさん2006/02/25(土) 13:21:09ID:???
>>896
(1) CSVファイルを一行ずつ読み込む
(2) 行がXXXでなければprint
(3) 終了
0898nobodyさん2006/02/25(土) 13:50:14ID:???
暇だから釣られてみた
ロックとかエラー処理は自分で付け加えてね
open(IN, "inputfile.csv");open(OUT, ">outputfile.csv");while(my $inline = <IN>){if($inline =~ /XXX/){print OUT $inline;}}close(IN);close(OUT);
… どこのセルにXXXが含まれてるか分からんからこれ以上は無理
0899nobodyさん2006/02/25(土) 13:51:44ID:???
軽く間違えたw
if(!($inline =~ /XXX/)){〜
0900nobodyさん2006/02/25(土) 14:08:44ID:???
!~ 使えよ。
0901nobodyさん2006/02/25(土) 15:47:11ID:???
初心者の初心者による初心者のための質問スレ
0902nobodyさん2006/02/25(土) 16:01:54ID:???
初心者の初心者による初心者のための底辺質問スレ
0903nobodyさん2006/02/25(土) 18:07:52ID:???
という訳で、上級者の>>901様と>>902様がツッコミどころの無い完璧なレスをしてくれます。
0904nobodyさん2006/02/25(土) 18:21:00ID:???
> という訳で、上級者の>>901様と>>902様がツッコミどころの無い完璧なレスをしてくれます。

>>901 と >>902 が上級者である根拠は?
0905nobodyさん2006/02/25(土) 18:22:11ID:???
臭いでわかる
0906nobodyさん2006/02/25(土) 18:26:41ID:???
汚物は消毒(ry
0907nobodyさん2006/02/25(土) 18:26:45ID:???
臭いでわかるための方法をきぼん。
0908nobodyさん2006/02/25(土) 18:27:58ID:???
汚物を消毒したからといって、汚物のままなのでは?
0909nobodyさん2006/02/25(土) 21:51:05ID:???
消毒しても癒されない。
0910nobodyさん2006/02/25(土) 22:35:17ID:???
質問があります。
今Perlの勉強の為に掲示板を作ってるんですが、
例えば十バイト毎に段落を変えたい場合どうすれば良いのでしょうか?
なにとぞご教授下さい。
0911nobodyさん2006/02/25(土) 22:37:34ID:???
substr
0912nobodyさん2006/02/25(土) 22:40:48ID:???
>>910
It's 書き込みテスト

お前、これを10バイトで段落変えてみろ
0913nobodyさん2006/02/26(日) 00:33:33ID:???
S-JISなのかEUCなのかUTF-8なのかUTF-16なのかで(ry
0914nobodyさん2006/02/26(日) 00:39:08ID:???
>>910
1) 10バイトを別の文字列にコピー
2) その文字列を正規表現などで、正しい文字列かチェック
3) 正しくなければ、1バイト減らしてコピーして2)へ戻る
4) 正しければ終了
0915nobodyさん2006/02/26(日) 02:24:54ID:???
UCSだったr(ry
0916nobodyさん2006/02/26(日) 14:45:09ID:???
(ry
0917nobodyさん2006/02/26(日) 16:03:42ID:QDNmTDhH
すいません。perl初めてまだ数日の者ですので馬鹿みたいな質問
ですが宜しくお願い致します。

Q.関数の値を代入する際、サイズの制限はあるのでしょうか?
例えば私が考えているので
$test = "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">・・・";
などのように関数にそのままHTMLソースを入れているのですが結構なサイズ
になってしまうので不安です。
0918nobodyさん2006/02/26(日) 16:05:28ID:???
> すいません。perl初めてまだ数日の者ですので馬鹿みたいな質問
> ですが宜しくお願い致します。

ということにしたいのですね。:)

ちなみにどう「初め」たのか教えてください。
0919nobodyさん2006/02/26(日) 17:06:28ID:???
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

もちろんどこまで「結構なサイズ」が変数に代入できるかを試した上での質問だよな?
0920nobodyさん2006/02/26(日) 17:11:02ID:???
どうでもいいけど共有鯖でテストするなよ
自鯖でテストしろよ
0921nobodyさん2006/02/26(日) 17:24:37ID:???
>>917
多分、メモリが許す限り。
使用メモリに制限がかかっていたら、そこまで。
0922nobodyさん2006/02/26(日) 17:55:40ID:???
関数つか変数だろ?
0923nobodyさん2006/02/26(日) 18:01:28ID:???
うむ。みんなすごいな。
0924nobodyさん2006/02/26(日) 18:09:45ID:???
なんかもう全部の質問がネタに見えてきた
末期かな
0925nobodyさん2006/02/26(日) 18:23:15ID:???
御臨終です
0926nobodyさん2006/02/26(日) 18:57:50ID:???
>>920
ごめんなさい、自鯖というのは何でしょうか?
それでテストということは、テストを行う環境ということでしょうか?
0927nobodyさん2006/02/26(日) 19:40:19ID:???
http://pc8.2ch.net/mysv/
0928nobodyさん2006/02/26(日) 19:48:41ID:???
だってネタだし。
0929nobodyさん2006/02/26(日) 21:04:48ID:???
屑どもが・・・
0930nobodyさん2006/02/26(日) 21:54:22ID:???
IPアドレスを変化させてスキャンするようなものを書きたいのですがうまくいきません。
どのように書いたら良いのでしょうか?変数の選び方が間違っているのでしょうか?

ちなみに、現在は下のプログラムで、"192.168.0.1:80"をポートチェックしています。

for ($i = 0; $i<3; $i++)
{

$port=80;
$ip_add=192.168.0.1;
#↑の行を $ip_add=192.168.0.1+$i; みたいにしたい。

&CheckPort($portNo,$ip_add);

}
0931勉強中2006/02/26(日) 22:16:58ID:???
Perlでは、
「NULL」と「LOW-BALUE(1バイトの'00')」は
違うものなのでしょうか???
0932nobodyさん2006/02/26(日) 22:33:06ID:???
Perl使った事あるのでしょうか???
0933nobodyさん2006/02/26(日) 22:35:33ID:???
PerlにNULLなんてないよ。
0934 ◆TWARamEjuA NGNG
>>930
32bits整数にしちゃうと楽かも♪
0935nobodyさん2006/02/26(日) 22:57:08ID:???
ちなみに文字列とかにはヌル文字('¥0')使えるよ。
Cと違ってperlは文字列長を管理してるからヌル文字が境界にならない。

1文字だけの文字列を作っても、
内部ではreallocが多くならないように、長めにメモリが割り当てらる。
で、文字列長は1文字、とスカラ構造体のどっかに値が入る。
なので文字列にヌル文字入ってても平気。
0936nobodyさん2006/02/26(日) 23:59:32ID:???
何か知らんけど、気が済むまでスキャンしてろ。

my $port = 80;
for (my $x = 0; $x < 256; $x++) {
for (my $y= 0; $y < 256; $y++) {
my $ip_addr = sprintf("192.168.%d.%d", $x, $y);
CheckPort($port, $ipaddr);
}
}

0937nobodyさん2006/02/27(月) 00:22:17ID:???
痛いソース・・・
0938nobodyさん2006/02/27(月) 00:46:54ID:???
>>937
もっとマシに書ける?
わかりやすく、かつ、バグがない書き方だと思うけど。
0939nobodyさん2006/02/27(月) 01:17:08ID:???
以前に作った IP アドレスを10進数に変換する関数だけどつかってみてくらさい
ただ、自分の環境でしかテストしてないので間違いがあるかもしれないです

戻り値が 0 の場合はエラー判定してください

sub ip2dec{
  my($ip) = $_[0];
  my($basedec) = 256 * 256 * 256 * 256; # ベースとなる値
  my(@quadip) = (0, 0, 0, 0);
  my($ipdec) = 0; # 10進に変換された IP

  @quadip = split(/\./, $ip);
  # 全ての値が 0 〜 255 に収まってるかチェック
  for(my $i = 0; $i < 4; $i++){
    if(($quadip[$i] < 0) || ($quadip[$i] > 255)){
      return 0;
    }
  }
  for(my $i = 0; $i < 4; $i++){
    $basedec = $basedec / 256;
    $ipdec += $basedec * $quadip[$i];
  }
  return $ipdec;
}

0940nobodyさん2006/02/27(月) 01:17:53ID:???
>   my($ip) = $_[0];

shift 使えよ。
0941nobodyさん2006/02/27(月) 01:23:23ID:???
修正した
my($ip) = $_[0] || "";
0942nobodyさん2006/02/27(月) 01:29:03ID:???
>>939
取りあえずfor (my $x = 0; $x < 256; $x++)→for (0 .. 256)な。
0943nobodyさん2006/02/27(月) 01:29:05ID:???
それだと 0 が渡ってきたとき "" になるんだよね。
0944nobodyさん2006/02/27(月) 01:29:59ID:???
>>942
/16 用にネストしてるけど、どうするんだろう。
0945nobodyさん2006/02/27(月) 01:49:09ID:???
my @ip = (192, 168, 0, 0);

foreach(1..65537){
print join('.', @ip), "\n";

foreach(reverse @ip){
($_ = $_+1 & 255) and last;
}
}
0946nobodyさん2006/02/27(月) 01:52:39ID:???
そんなひねくれた書き方すると、バグ探しが面倒。

でさ、65537 って、0x10001 なんだけど。
0947nobodyさん2006/02/27(月) 01:58:31ID:???
>942
$x なんて使ってないし・・・

>943
my($ip) = $_[0] || "";
そこには書かれてないけど
if(!$ip){ return 0; }
で抜けるようにした


ちなみに
&ip2dec("220.110.54.66");
みたく呼ばれることを想定
0948ヽ(´ー`)ノ ◆.ogCuANUcE 2006/02/27(月) 01:59:20ID:???
黙って Socket::inet_aton() か Socket6::inet_pton() 使えよ。
0949nobodyさん2006/02/27(月) 02:00:59ID:???
あるものに頼ってばかりいると「思いつく力」 が欠けてくるので
出来るところは自分で書いた次第です
09509452006/02/27(月) 02:02:33ID:???
my $ip = unpack("N", pack("C4", (192, 168, 0, 0)));

foreach(0..65536){
print join('.', unpack("C4", pack("N", $ip+$_))), "\n";
}

>>946
ただのカウンタだから。
カウントする回数は適当にどうぞ。
0951nobodyさん2006/02/27(月) 02:02:44ID:???
>>942
すごいスーパーハカーですね。

for ($x = 0; $x < 256; $x++)
と
for $x (0 .. 256)

って同じ結果を得られるんですかね?

0952nobodyさん2006/02/27(月) 02:03:39ID:???
>>944
そんならfor my $x (0 .. 256)でOKですぅ〜。
0953nobodyさん2006/02/27(月) 02:04:32ID:???
気付いても黙っていてあげるのもやさしさですよ?
0954nobodyさん2006/02/27(月) 02:05:17ID:???
>952
それでforのなかで$xが扱えるの?
いい事しりました
0955nobodyさん2006/02/27(月) 02:06:48ID:???
>>951
うっせ!そんなので下らない文字レスするなハゲ!あああ、私が悪うござんした。ケアレスミスぐらい多めに見ろやハゲ。
0956nobodyさん2006/02/27(月) 02:07:28ID:???
何気に人が多いでつね。
デスマ中でつか?
0957nobodyさん2006/02/27(月) 02:08:31ID:???
必死に文献探してやっと間違いが分かったくせして・・・
0958nobodyさん2006/02/27(月) 02:11:54ID:???
いやー、釣れた釣れた
0959nobodyさん2006/02/27(月) 02:12:47ID:???
大体、釣れたって後から宣言する奴は返す言葉がなくなった奴だな。
09609452006/02/27(月) 02:14:36ID:???
>>958
これ忘れ物ですよ。
ttp://images-jp.amazon.com/images/P/4759222197.09.LZZZZZZZ.jpg
0961nobodyさん2006/02/27(月) 02:21:18ID:???
書くソースもつまらなければ返しもつまらないな
0962nobodyさん2006/02/27(月) 03:10:33ID:???
初心者が集まって下らないことを言いあってる糞スレはここでつか?
0963nobodyさん2006/02/27(月) 07:31:56ID:???
&#65;をAにデコードするのはどうすればいいですか?
0964nobodyさん2006/02/27(月) 08:37:23ID:???
my $string = "???";
$string =~ s/?([0-9]+);/chr($1)/eg;
print $string; #ABC
0965nobodyさん2006/02/27(月) 08:38:12ID:???
1行目みすった。
my $string = "&#65;&#66;&#67;"
0966nobodyさん2006/02/27(月) 09:47:10ID:???
2行目も
0967nobodyさん2006/02/27(月) 09:59:42ID:???
ほんとこのスレ初心者ばっかでワロタ
0968nobodyさん2006/02/27(月) 10:15:42ID:???
↑初心者
0969nobodyさん2006/02/27(月) 23:11:57ID:???
perlにて以下のような事は実装可能でしょうか。
可能であれば教えてくらはい。

ページAからページBに遷移した場合は1としてカウントし、
ページB内で何度更新しても1としてカウントする。
ページBからブラウザの戻るボタンを押してページAに戻り
再びページBに戻ってきた場合は1としてカウントする。

ただし、ページAはこちらでは操作出来ない(弄くれない)ものとする。

 
最初はリファラーチェックすればいけるかなぁと思ったんですが
ページAから遷移した状態のページBで何度更新してもページAの
リファラーが返っていたのでタメポですた。
何かいい案があれば教えてくらはいませ〜。
0970nobodyさん2006/02/27(月) 23:27:41ID:???
ページAでクッキーセットしてページBでクッキー削除
なのでページBでリロードしてもクッキーが取得できないのでカウントアップしない

ってのはどうだろか
レス数が950を超えています。1000を超えると書き込みができなくなります。