免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2230 | 回复: 6
打印 上一主题 下一主题

[求助]几个模块cpan上找不到,google也找不到。。。急死人了!向各位求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-01 10:02 |只看该作者 |倒序浏览
求助各位了。。。

Sledge:lugin::Mail
Sledge:lugin::Validation
Sledge::Exception::MapFileUndefined
Edge::Config
Edge::Mailer
Data:age::Googlish

Sledge像是开发框架的模块, 很多子模块cpan都下载到了! 独独缺了这3个子模块   Sledge:lugin::Mailer 和 Sledge:lugin::Mail::Japanese到是找到了! 唉  

上面6个模块在cpan和google上都找过了。。。还是找不到。。。有哪位用过上面模块的朋友知道下载地址给个也行啊, 在此先谢谢大家了!

论坛徽章:
0
2 [报告]
发表于 2006-11-01 10:49 |只看该作者
这么多娃娃头?

论坛徽章:
0
3 [报告]
发表于 2006-11-02 13:53 |只看该作者

  1. Sledge::Plugin::Mail
  2. Sledge::Plugin::Validation
  3. Edge::Config
  4. Edge::Mailer
复制代码

上面这4个我可以给你

Sledge::Exception::MapFileUndefined这个你是不是写错了,Sledge框架里面没有Exception这个目录
我估计你要找的是不是Sledge::Exceptions::MapFileUndefined这个?
如果是的话那么你可以在Sledge::Exceptions这个模块里面找找看是否有Sledge::Exceptions::MapFileUndefined这个package.


  1. Data::Page::Googlish
复制代码

这个就不清楚了.

[ 本帖最后由 gsging 于 2006-11-2 14:02 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-11-02 13:55 |只看该作者

  1. package Sledge::Plugin::Mail;
  2. # $Id: Mail.pm,v 1.12 2002/04/24 18:11:28 miyagawa Exp $
  3. #
  4. # Tatsuhiko Miyagawa <miyagawa@edge.co.jp>
  5. # Livin' On The EDGE, Limited.
  6. #

  7. use strict;
  8. use vars qw($VERSION);
  9. $VERSION = 0.06;

  10. use base qw(Class::Accessor);
  11. __PACKAGE__->mk_accessors(qw(to sender _tmpl filter));

  12. use Edge::Mailer;

  13. use vars qw($SendVia);
  14. $SendVia = 'localhost';

  15. sub import {
  16.     my $class = shift;
  17.     my $pkg = caller;

  18.     no strict 'refs';
  19.     *{"$pkg\::init_mail"} = sub {
  20.         my($self, $name) = @_;
  21.         # template load
  22.         $self->{mail} = $self->create_mail($name);
  23.     };
  24.     *{"$pkg\::create_mail"} = sub {
  25.         my($self, $name) = @_;
  26.         return $class->new($name, $self);
  27.     };
  28.     *{"$pkg\::mail"} = sub {
  29.         my $self = shift;
  30.         $self->{mail};
  31.     };
  32. }

  33. sub new {
  34.     my($class, $name, $page) = @_;
  35.     my $self = bless {}, $class;

  36.     $name .= '.eml' if $name !~ /\./;

  37.     my $file = $page->can('mail_tmpl_dirname')
  38.         ? join("/", $page->create_config->tmpl_path, $page->mail_tmpl_dirname, $name)
  39.             : $page->guess_filename($name);

  40.     $self->_tmpl($page->create_template($file));
  41.     return $self;
  42. }

  43. sub param {
  44.     my $self = shift;
  45.     $self->_tmpl->param(@_);
  46. }

  47. sub send {
  48.     my $self = shift;

  49.     # $SendVia = "smtp.example.com" || "| /usr/sbin/sendmail"
  50.     my($host, $method, @send_args) = _choose_way($SendVia);
  51.     my $mailer = Edge::Mailer->new(
  52.         to       => $self->to,
  53.         sender   => $self->sender,
  54.         smtphost => $host,
  55.         filter   => $self->filter,
  56.         message  => $self->_tmpl->output,
  57.     );

  58.     $mailer->$method(@send_args);
  59. }

  60. sub _choose_way {
  61.     my $via = shift;
  62.     if ($via =~ s/^\|\s*//) {
  63.         # | /path/to/sendmail
  64.         return (undef, 'send_via_sendmail', $via);
  65.     }
  66.     return ($via, 'send');
  67. }

复制代码

论坛徽章:
0
5 [报告]
发表于 2006-11-02 13:56 |只看该作者

  1. package Sledge::Plugin::Validation;
  2. # $Id: Validation.pm,v 1.4 2002/08/22 10:43:44 miyagawa Exp $
  3. #
  4. # Tatsuhiko Miyagawa <miyagawa@edge.co.jp>
  5. # Livin' On The EDGE, Limited.
  6. #

  7. use strict;
  8. use vars qw($VERSION);
  9. $VERSION = 0.02;

  10. use Sledge::Constants;
  11. use Sledge::Exceptions;

  12. sub import {
  13.     my $class = shift;
  14.     return unless @_;

  15.     my %args = @_;
  16.     my $pkg = caller;
  17.     no strict 'refs';
  18.     while (my($page, $validator) = each %args) {
  19.         *{"$pkg\::post_dispatch_$page"} = $class->make_post_closure($page, $validator);
  20.     }
  21. }

  22. sub make_post_closure {
  23.     my($class, $page, $val_class) = @_;
  24.     my $val_method = 'validate'; # default
  25.     if ($val_class =~ /^(.*)\->(.*)$/) {
  26.         $val_class = $1;
  27.         $val_method = $2;
  28.     }
  29.     eval qq{require $val_class};
  30.     if ($@ && $@ !~ /locate/) {
  31.         Sledge::Exception::ClassUndefined->throw($@);
  32.     }
  33.     return sub {
  34.         my $self = shift;
  35.         my $validator  = $val_class->new;
  36.         my($status, $reason) = $validator->$val_method($self);
  37.         my $method = ($status == SUCCESS) ? "succeed_$page" : "fail_$page";
  38.         $self->$method($reason);
  39.     };
  40. }

  41. 1;
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-11-02 13:57 |只看该作者

  1. package Edge::Config;

  2. use strict;
  3. use vars qw($VERSION);
  4. $VERSION = 0.12;

  5. use Tie::Hash;
  6. use base 'Tie::StdHash';
  7. use Carp ();

  8. sub safe_load {
  9.     my $module = shift;
  10.     $module =~ /^([A-Za-z0-9_\:]+)$/;
  11.     $module = $1;
  12.     eval qq{require $module};
  13. }

  14. # XXX 5.8.0 Tie::StdHash doesn't have new()
  15. sub new {
  16.     my $pkg = shift;
  17.     $pkg->TIEHASH(@_);
  18. }

  19. sub TIEHASH {
  20.     my($class, $configname) = @_;

  21.     no strict 'refs';
  22.     local $@;

  23.     my $common_name = $ENV{EDGE_CONFIG_COMMON_NAME} || '_common';
  24.     safe_load("${class}::${common_name}");
  25.     die $@ if $@ && $@ !~ /Can\'t locate/;
  26.     if ($configname) {
  27.         safe_load("${class}::${configname}");
  28.         die $@ if $@ && $@ !~ /Can\'t locate/;
  29.     }
  30.     my %config = %{join '::', $class, $common_name, 'Config'};
  31.     %config = (%config, %{join '::', $class, $configname, 'Config'}) if $configname;

  32.     # case sensitive hash
  33.     %config = map { lc($_) => $config{$_} } keys %config
  34.         unless $class->case_sensitive;
  35.     bless \%config, $class;
  36. }

  37. sub FETCH {
  38.     my($self, $key) = @_;
  39.     unless (ref($self)) {
  40.         require Carp;
  41.         Carp::carp "Possibly misuse: $key called as a class method.";
  42.     }
  43.     $key = lc($key) unless $self->case_sensitive;
  44.     Carp::croak "no such key: $key"
  45.         if (! exists $self->{$key} && $self->strict_param);
  46.     $self->{$key};
  47. }

  48. sub STORE {
  49.     my($self, $key, $value) = @_;
  50.     $key = lc($key) unless $self->case_sensitive;
  51.     Carp::croak "can't modify param $key"
  52.         unless $self->can_modify_param;
  53.     $self->{$key} = $value;
  54. }

  55. sub param {
  56.     my $self = shift;
  57.     if (@_ == 0) {
  58.         return keys %{$self};
  59.     }
  60.     elsif (@_ == 1) {
  61.         my $value = $self->FETCH(@_);
  62.         if (wantarray && ref($value)) {
  63.             return @$value if ref($value) eq 'ARRAY';
  64.             return %$value if ref($value) eq 'HASH';
  65.         }
  66.         return $value;
  67.     }
  68.     else {
  69.         $self->STORE(@_);
  70.     }
  71. }

  72. # default value
  73. sub strict_param { 1; }
  74. sub can_modify_param { 0; }
  75. sub case_sensitive { 1; }

  76. # nop for AUTOLOAD
  77. sub DESTROY { }

  78. use vars qw($AUTOLOAD);
  79. sub AUTOLOAD {
  80.     my $self = shift;
  81.     $AUTOLOAD =~ s/.*:://;

  82.     # cache accessor
  83.     $self->_create_accessor($AUTOLOAD);

  84.     $self->param($AUTOLOAD, @_);
  85. }

  86. sub _create_accessor {
  87.     my($self, $accessor) = @_;

  88.     no strict 'refs';
  89.     my $class = ref $self;
  90.     *{"$class\::$accessor"} = sub {
  91.         my $self = shift;
  92.         $self->param($accessor, @_);
  93.     };
  94. }

  95. 1;
  96. __END__

  97. =head1 NAME

  98. Edge::Config - Edge standard application configuration

  99. =head1 SYNOPSIS

  100.   package YourProject::Config;
  101.   use base 'Edge::Config';

  102.   package main;
  103.   use YourProject::Config;

  104.   # for OO-kids
  105.   $config = YourProject::Config->new;
  106.   $config = YourProject::Config->new($configname);

  107.   # for hash lover
  108.   tie %config, 'YourProject::Config';
  109.   tie %config, 'YourProject::Config', $configname;


  110. =head1 DESCRIPTION

  111. see README.

  112. =head1 AUTHOR

  113. Tatsuhiko Miyagawa <miyagawa@edge.co.jp>

  114. =head1 SEE ALSO

  115. perl(1).

  116. =cut
复制代码

Edge-Config.tar.gz

4.95 KB, 下载次数: 14

论坛徽章:
0
7 [报告]
发表于 2006-11-02 14:00 |只看该作者

  1. # $Id: Mailer.pm,v 1.14 2005/01/07 06:36:54 taniguchi Exp $
  2. package Edge::Mailer;

  3. use strict;
  4. use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);

  5. require Exporter;
  6. @ISA = qw(Exporter);
  7. @EXPORT = qw(mailer);
  8. $VERSION = '0.16';

  9. use Carp;
  10. use FileHandle;
  11. use Jcode;
  12. use Net::SMTP;
  13. use Sys::Hostname;

  14. use constant TIMEOUT_DEFAULT    => 30;
  15. use constant SMTPHOST_DEFAULT   => 'localhost';

  16. use constant RFC_COMPLIANT_VERSION => 0.64;

  17. sub new {
  18.     my $proto = shift;
  19.     my $class = ref $proto || $proto;

  20.     my $self = bless {
  21.         timeout => TIMEOUT_DEFAULT,
  22.         smtphost => SMTPHOST_DEFAULT,
  23.     }, $class;
  24.     $self->_init(@_);
  25.     return $self;
  26. }

  27. sub mailer { __PACKAGE__->new(@_); }

  28. sub _init {
  29.     my $self = shift;
  30.     while (my ($key, $val) = splice(@_, 0, 2)) {
  31.         $self->{$key} = $val;
  32.     }
  33.     return $self;
  34. }

  35. sub _prepare_send {
  36.     my $self = shift;

  37.     # 必須フィールドがなければ warning and return
  38.     foreach my $field (qw( to sender message )) {
  39.         defined $self->{$field} or do {
  40.             carp __PACKAGE__.":$field is required!";
  41.             return;
  42.         };
  43.     }

  44.     # RCPT 複数の場合は array reference
  45.     my @rcpt = ref($self->{to}) eq 'ARRAY'
  46.         ? @{$self->{to}} : ($self->{to});
  47.     # 最初は EUC にしておく
  48.     my $message = Jcode->new($self->{message})->h2z->euc;

  49.     # Time-Zone diff
  50.     my $date = rfc2822date(localtime());
  51.     my $fqdn = $self->{smtphost} ne SMTPHOST_DEFAULT ?
  52.         $self->{smtphost} : $ENV{SERVER_NAME} || Sys::Hostname::hostname;

  53.     # smtphost で指定した時はIP-addrかもしれない
  54.     # IP-addr の場合は ...@[11.11.11.11] のようにする
  55.     $fqdn =~ s/^(\d+\.\d+\.\d+\.\d+)$/[$1]/;

  56.     my $message_id = sprintf '<%s.%s.%s@%s>', time, $$, random_str(6), $fqdn;

  57.     # デフォルトヘッダ作成
  58.     my %header = (From => $self->{sender},
  59.                   'X-Sender' => $self->{sender},
  60.                   To => join(', ', @rcpt),
  61.                   Subject => '(no-title)',
  62.                   Date => $date,
  63.                   'Message-Id' => $message_id,
  64.                   'X-Mailer' => "Edge Mailer $VERSION",
  65.                   'Content-Type' => 'text/plain; charset="ISO-2022-JP"',
  66.                   'MIME-Version' => '1.0',
  67.                   'Content-Transfer-Encoding' => '7bit');
  68.     %header = map { lc($_) => $header{$_} } keys %header;

  69.     # $message の最初の空行までをヘッダとみなす
  70.     my ($header, $body) = split /\n\n/, $message, 2;

  71.     # フォームの \r\n をカット
  72.     $body =~ s/\r\n|\r/\n/g;

  73.     # extract headers
  74.     my %orig_hdr;
  75.     my $current_hdr;
  76.     for (split /\n/, $header) {
  77.         if (/^(\S+?):\s+(.+)$/) {
  78.             $current_hdr = lc($1);
  79.             $orig_hdr{$current_hdr} = $2;
  80.         } elsif (/^\s+(.+)$/) {
  81.             $orig_hdr{$current_hdr} .= ' '. $1;
  82.         }
  83.     }

  84.     # merge
  85.     %orig_hdr = (%header, %orig_hdr);

  86.     # MIME-Encode
  87.     my $encoder = Jcode->VERSION >= RFC_COMPLIANT_VERSION
  88.         ? sub { Jcode->new($_[0])->mime_encode() }
  89.         : \&encode_mime;
  90.     my %mime_header = map {
  91.         $_ => _include_multibyte($orig_hdr{$_})
  92.             ? $encoder->($orig_hdr{$_}) : $orig_hdr{$_};
  93.     } keys %orig_hdr;

  94.     $self->{_mail_header} = \%mime_header;
  95.     $self->{_mail_body} = $body;
  96.     $self->{_mail_to} = \@rcpt;
  97. }

  98. sub send {
  99.     my $self = shift;
  100.     $self->_prepare_send;

  101.     my $smtp = Net::SMTP->new($self->{smtphost},
  102.                               Timeout => $self->{timeout},
  103.                               Hello => Sys::Hostname::hostname)
  104.         or do {
  105.             carp __PACKAGE__.":$self->{smtphost}: $!";
  106.             return;
  107.         };

  108.     my($mailheader, $mailbody) = $self->_pretty_print;
  109.     ($smtp->mail($self->{sender}) and
  110.      $smtp->to(@{$self->{_mail_to}}) and
  111.      $smtp->data() and
  112.      $smtp->datasend($mailheader) and
  113.      $smtp->datasend("\n") and
  114.      $smtp->datasend($mailbody) and
  115.      $smtp->dataend() and
  116.      $smtp->quit) or do {
  117.          carp __PACKAGE__.":SMTP communication failed: $!";
  118.          return;
  119.      };

  120.     $self->_cleanup_send;
  121.     return 1;
  122. }

  123. sub _pretty_print {
  124.     my $self = shift;

  125.     my $filtersub = $self->{filter} || sub { Jcode->new($_[0])->jis; };
  126.     my $mailbody = $filtersub->($self->{_mail_body});

  127.     my $mailheader = join '', map { uc_hiphen($_) . ': ' . $self->{_mail_header}->{$_} ."\n" } keys %{$self->{_mail_header}};
  128.     return $mailheader, $mailbody;
  129. }

  130. sub _cleanup_send {
  131.     my $self = shift;
  132.     delete $self->{_mail_header};
  133.     delete $self->{_mail_body};
  134.     delete $self->{_mail_to};
  135. }

  136. sub send_via_sendmail {
  137.     my($self, $sendmail) = @_;
  138.     $self->_prepare_send;
  139.     my($mailheader, $mailbody) = $self->_pretty_print;
  140.     my $command = sprintf "%s -f %s %s",
  141.         $sendmail, $self->{sender}, join(' ', @{$self->{_mail_to}});
  142.     my $handle = FileHandle->new("| $command");
  143.     $handle->print($mailheader);
  144.     $handle->print("\n");
  145.     $handle->print($mailbody);
  146.     $handle->close;
  147.     $self->_cleanup_send;
  148. }

  149. sub encode_mime {
  150.     my @field = split /\s+/, shift;
  151.     my @encoded = map { _include_multibyte($_)
  152.                             ? _dirty_encode($_) : $_ } @field;
  153.     return join ' ', @encoded;
  154. }

  155. sub _include_multibyte {
  156.     my $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
  157.     my $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';

  158.     return $_[0] =~ /$twoBytes|$threeBytes/;
  159. }

  160. sub _dirty_encode {
  161.     require MIME::Base64;
  162.     my $word = shift;
  163.     return '=?ISO-2022-JP?B?' . MIME::Base64::encode_base64(Jcode->new($word)->iso_2022_jp, '') . '?=';
  164. }

  165. sub uc_hiphen {
  166.     my $word = shift;
  167.     return join '-', map { ucfirst } split /-/, $word;
  168. }


  169. sub random_str($) {
  170.     my ($length) = @_;

  171.     # from perldoc -f srand
  172.     # This statement is something OS specific
  173.     #srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

  174.     my @string = (0..9, 'A'..'Z', 'a'..'z');
  175.     return join '', map { $string[rand $#string] } (0..$length-1);
  176. }

  177. sub rfc2822date {
  178.     my @t = @_; # localtime.
  179.     my $diff = calc_diff();
  180.     my @days = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
  181.     my @months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun",
  182.                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
  183.     my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = @t;
  184.     return sprintf("%s, %s %s %04d %02d:%02d:%02d $diff",
  185.                    $days[$wday], $mday, $months[$mon], $year + 1900, $hour, $min, $sec);
  186. }

  187. # gmtime と localtime から time-zone を計算
  188. # '+0900' のような文字列を返す
  189. sub calc_diff {
  190.     use Time::Local;
  191.     my $diff_time = time - timelocal(gmtime(time));

  192.     use integer;
  193.     my $diff_hour = $diff_time / (60 * 60);
  194.     my $diff_min =  abs(($diff_time % (60 * 60)) / 60);
  195.     local $ENV{LANG}; # no LANG=ja
  196.     return sprintf '%+03d%02d', $diff_hour, $diff_min;
  197. }


  198. 1;
  199. __END__

  200. =head1 NAME

  201. Edge::Mailer - Standard Mailer of Livin' On The EDGE.

  202. =head1 SYNOPSIS

  203.   use Edge::Mailer;

  204.   my $mailer = Edge::Mailer->new(to => $to,
  205.                                  sender => $sender,
  206.                                  message => $message);
  207.   $mailer->send;

  208.   # Same as above
  209.   mailer(to => $to, sender => $sender, message => $message)->send;

  210.   # specify SMTP server and Timeout
  211.   my $mailer = Edge::Mailer->new(to => $to,
  212.                                  sender => $sender,
  213.                                  message => $message,
  214.                                  smtphost => $smtphost,
  215.                                  timeout => 30);

  216.   # filters message-body before sending.
  217.   # this is invalid for RFC, but sometimes required for i-mode
  218.   my $mailer = Edge::Mailer->new(to => 'someone@docomo.ne.jp',
  219.                                  sender => $sender,
  220.                                  message => $message,
  221.                                  filter => sub { Jcode->new($_[0])->z2h->sjis });

  222. =head1 DESCRIPTION

  223. This module provides easy way for sending mail. Required headers like '
  224. Message-Id', 'Date'... are automatically assigned by this
  225. module. Useful when MTA on your SMTP server is a strict qmail...

  226. =head1 AUTHOR

  227. Tatsuhiko Miyagwa <miyagawa@edge.co.jp>
  228. Livin' On The Edge, Limited.

  229. =head1 SEE ALSO

  230. perl(1), Net::SMTP.

  231. =cut

复制代码

Edge-Mailer.tar.gz

12.06 KB, 下载次数: 24

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP