Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > sub


Автор: frenkys 20.3.2006, 22:33
есть процедурка:


Код

sub gzip
{

if(($ENV{HTTP_ACCEPT_ENCODING} || '') =~ /gzip/){
        
        
                $a = Compress::Zlib::memGzip($a);
                print "Content-Encoding: gzip\n";}

print header(-charset=>'Windows-1251')
}


как безболезненно ее исправить что бі не менять имя и чтоб в логи не шло:

Subroutine gzip redefined

Автор: nitr 20.3.2006, 23:06
Исправить во что?

Автор: frenkys 20.3.2006, 23:08
испрвить процедуру можно? чтоб не было конфликта имен?

Автор: nitr 20.3.2006, 23:14
Покажи код smile чтолева. Я всё понимаю, но не вижу в процедуре ошибки, хошь переименуй её в gzip_my

Автор: frenkys 20.3.2006, 23:18
1.pl

Код

#!/usr/bin/perl -w

require 'cont3.pl';


$a="hehe";

gzip();
print $a;




cont3.pl

Код

sub gzip
{

if(($ENV{HTTP_ACCEPT_ENCODING} || '') =~ /gzip/){
        
        
                $a = Compress::Zlib::memGzip($a);
                print "Content-Encoding: gzip\n";}

print header(-charset=>'Windows-1251')
}





после запуска 1.pl

Subroutine gzip redefined at cont3.pl line2

Автор: nitr 20.3.2006, 23:27
Ты весь покажи код 1.pl

и вызывай &gzip();
если в файле cont3.pl одни процедурки, то поставь в конце
Код

1;

smile

Автор: frenkys 20.3.2006, 23:30
а что значит 1;
Добавлено @ 23:37
блин, даже если просто пустой файл

Код

#!/usr/bin/perl -w

require 'cont3.pl';



запустить

то все равно пишет что
Subroutine gzip redefined at cont3.pl line2

Автор: nitr 21.3.2006, 00:00
Ну представь, файлик-модуль весь состоит из одних процедур smile что делать перлу... они же не вызываются smile вот и простейший код 1; ничего не делает... как проще объяснить smile и КСТАТИ у меня такой ошибки нет. Утебя вообще в cont3.pl use есть? use CGI qw(:standard); напиши ;)
Добавлено @ 00:02
что у тебя за странный код... ужас

Автор: frenkys 21.3.2006, 00:11
да все там есть:


cont3.pl
Код

use CGI qw(:standard);
use DBI;
use Compress::Zlib;
use Fcntl qw(:flock);
 
$|=1;


#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub get_lock {
my $name=shift || 'default';
open($name, ">$name.sem") ;
flock($name,LOCK_EX) || "Cant block the file $name:$!";
} 
sub relase_lock {
$name=shift || 'default';
close($name);
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub quit
{
my $url = $ENV{'SCRIPT_NAME'};
my $erorr="$DBI::errstr <br>\n";

  get_lock('litlelog.txt');
   open(AD ,">>litlelog.txt") || die "open file error";
   
   print AD "$url\n";
   print AD @_,"\n" if @_;
   print AD "$erorr\n";
   
   close(AD);
   relase_lock('litlelog.txt');
 }
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub db_connect
{
$dbh = DBI->connect("DBI:mysql:ddd:localhost","ddd","ddd") || die "ccc";
    return $dbh;
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub block_write  
{
my($word)=@_;
my $abnbanner;
$abnbanner=<<PAGE_HERE;  
<body background=../../img/color0.gif>
<table width=120 border=0 cellspacing=0 cellpadding=0 align=center>
<tr><td ><img src=../../img/error.gif width=120 height=10></td></tr>
<tr>
<td bgcolor=white height=50><div align=center>
<FONT face="Verdana, Arial, Helvetica, sans-serif" size=1>$word</font>
<a href=addevents.pl><FONT face=Verdana, Arial, Helvetica, sans-serif size=1 color=blue> эрчрф</font></a><br>
</div>
<br></td></tr><br></tr>
<tr><td ><img src=../img/niz.gif width=120 height=10></td></tr>
</table><br><br>
</body>
PAGE_HERE
return($abnbanner);
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@222
sub bwrite  
{
my($word)=@_;
my $abnbanner;
$abnbanner=header(-charset=>'Windows-1251');
$abnbanner.="<FONT face=Verdana, Arial, Helvetica, sans-serif size=1>$word</font>";
return($abnbanner);
}
#@@@@@@@@@@@@@@@@@@@@@22
sub bwrite2  
{my($word)=@_;

my $abnbanner;
print header(-charset=>'Windows-1251');

print "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css.css\">$word";
exit 0;
}


#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@22
sub gzip
{

if(($ENV{HTTP_ACCEPT_ENCODING} || '') =~ /gzip/){
        
        
                $a = Compress::Zlib::memGzip($a);
                print "Content-Encoding: gzip\n";}

print header(-charset=>'Windows-1251')
}

1;




блин я так понимаю что кроме смены имя процедуры gzip() выхода нет

Автор: nitr 21.3.2006, 00:19
А что не так в изменении имени процедуры?

Автор: frenkys 21.3.2006, 00:24
ну просто влом было лапатить 110 файликов в них везде сплоьзуеться эта процедура

Автор: nitr 21.3.2006, 00:34
Попытайся переместить использование модуля Compress::Zlib smile Либо напиши use Compress::Zlib::memGzip; у меня нет этого модуля...
Добавлено @ 00:35
Поэтому немного сложна моя помощь smile И тем более покажи код ГДЕ ИСПОЛЬЗУЕТСЯ эта процедура в других файликах smile

Автор: frenkys 21.3.2006, 00:36
ладно все понятно smile (гиблое дело)

Автор: nitr 21.3.2006, 00:50
Не понятно я б сказал использование... ужасный код smile Если нужно переопределить функцию, то можно использовать прототипы, но проще понять где и для чего используется эта процедурка. Воспользуйся указанием
use Compress::Zlib::memGzip;

проверь что у тебя будет без строки use Compress::Zlib; smile

Автор: Kannabismus 21.3.2006, 14:39
Код

use Compress::Zlib();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)