2010-03-17 6 views

Respuesta

12
open my $fh, '+<', $file  or die "open failed: $!\n"; 
my $byte; 
sysread($fh, $byte, 1) == 1 or die "read failed: $!\n"; 
seek($fh, 0, 0); 
syswrite($fh, $new_byte) == 1 or die "write failed: $!\n"; 
close $fh      or die "close failed: $!\n"; 
+0

te falta un '" 'en la línea syswrite, pero parece que esto (correctamente) morir en archivos de cero bytes. No lo hubiera pensado, gracias. – jnylen

+0

@jnylen: arreglado, gracias –

6

Muchas formas de hacerlo. Una forma eficiente es abrir el archivo en modo de acceso aleatorio con open $fh, '+<':

my $first_byte = chr(14);  # or whatever you want the first byte to be 
open my $fh, '+<', $the_file; 
seek $fh, 0, 0;    # optional - cursor is originally set to 0 
print $fh $first_byte;   # could also use write or syswrite functions 
close $fh; 
+0

Gracias por explicar lo que ''+ <' 'hace, me gustaría poder comprobar varias soluciones. – jnylen

Cuestiones relacionadas