Shell no perl [RESOLVIDO]

1. Shell no perl [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 21/11/2012 - 11:16h

Tenho um script bem simples escrito em perl. Na minha versão 5.12 ele roda tranquilo, já na versão 5.16 ele não executa.
Fiz algumas alterações no script com a versão 5.16 e as mensagens de erro sumiram, mas a resposta não é válida.

O script pega o valor que está em /sbin/ip_externo e grava num banco de dados mysql. Com a versão 5.16 ele só grava o valor de "0".

Segue o script, se alguem puder me ajudar, ficasrei muito grato.

Geraldo.

#!/usr/bin/perl -w

my $DBhost="localhost";
my $DBlogin="login";
my $DBpassword="senha";
my $DBdatabase="banco";

use strict;
use Data::Dumper;
use POSIX qw(strftime);
use File::Basename;
use File::Copy;
use Sys::Hostname;
use Shell;
use DBD::mysql; #<= WORK ON THISSSSSSSss !!!!!


my $dsn = "DBI:mysql:database=$DBdatabase;host=$DBhost";
my $dbh = DBI->connect($dsn, $DBlogin, $DBpassword) or log_failure (" Couldn't connect to the MySQL server !");



my $grava = system ("cat /sbin/ip_externo");
print $grava;

###### NA VERSÃO 5.12 eu usava - my $grava = cat ("/sbin/ip_externo); e roda legal.


my $query="INSERT INTO internet VALUES(NULL,NULL,'Internet fora do ar','GERALDO', '$grava')";

$dbh->do($query) or do{
};



  


2. MELHOR RESPOSTA

Sandro Marcell
smarcell

(usa Slackware)

Enviado em 21/11/2012 - 15:10h

Como o amigo disse, use file handlers! Veja um exemplo simples:


# Arquivo que será lido:
$arquivo = 'arquivo.txt';

# Abre o arquivo pra leitura:
open(FILE , "< $arquivo") or die($!);
# Lê somente a primeira linha do arquivo:
$linha = readline(FILE);
close(FILE);

print "$linha\n";


3. Re: Shell no perl [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/11/2012 - 11:34h

geraldoquites escreveu:

Tenho um script bem simples escrito em perl. Na minha versão 5.12 ele roda tranquilo, já na versão 5.16 ele não executa.
Fiz algumas alterações no script com a versão 5.16 e as mensagens de erro sumiram, mas a resposta não é válida.

O script pega o valor que está em /sbin/ip_externo e grava num banco de dados mysql. Com a versão 5.16 ele só grava o valor de "0".

Segue o script, se alguem puder me ajudar, ficasrei muito grato.

Geraldo.

#!/usr/bin/perl -w

my $DBhost="localhost";
my $DBlogin="login";
my $DBpassword="senha";
my $DBdatabase="banco";

use strict;
use Data::Dumper;
use POSIX qw(strftime);
use File::Basename;
use File::Copy;
use Sys::Hostname;
use Shell;
use DBD::mysql; #<= WORK ON THISSSSSSSss !!!!!


my $dsn = "DBI:mysql:database=$DBdatabase;host=$DBhost";
my $dbh = DBI->connect($dsn, $DBlogin, $DBpassword) or log_failure (" Couldn't connect to the MySQL server !");



my $grava = system ("cat /sbin/ip_externo");
print $grava;

###### NA VERSÃO 5.12 eu usava - my $grava = cat ("/sbin/ip_externo); e roda legal.


my $query="INSERT INTO internet VALUES(NULL,NULL,'Internet fora do ar','GERALDO', '$grava')";

$dbh->do($query) or do{
};


Shell script

#!/bin/bash eh diferente de perl =)

já consultastes o livro das conchinhas do aurélio lá vc aprende tudo sobre shell script.



4. Re: Shell no perl [RESOLVIDO]

Sandro Marcell
smarcell

(usa Slackware)

Enviado em 21/11/2012 - 14:21h

Esse '/sbin/ip_externo' é um arquivo ou "comando"?


5. Re: Shell no perl [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 21/11/2012 - 14:34h

ip_externo é um arquivo com um apenas uma linha (meu ip externo) e que fica em /sbin. ok?


6. Re: Shell no perl [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 21/11/2012 - 14:46h

Esse valor zero retornado para sua variável, é o exit status do programa. Leia a documentação e veja os valores de retorno:

http://perldoc.perl.org/functions/system.html

Eu sugiro trabalhar com file handlers, nesse caso seria mais elegante e eficaz:

http://www.perlfect.com/articles/perlfile.shtml


7. Re: Shell no perl [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 21/11/2012 - 15:29h

Obrigado a todos pelas contribuições na minha dúvida!

A resposta e o exemplo do smarcell funcionou perfeitamente.

Viva o Linux!!!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts