POD2-ES
view release on metacpan or search on metacpan
lib/POD2/ES/perlfunc.pod view on Meta::CPAN
L<C<socketpair>|/socketpair SOCKET1,SOCKET2,DOMINIO,TIPO,PROTOCOLO>
=item Funciones de comunicación interprocesos System V
X<IPC> X<System V> X<semaphore> X<shared memory> X<memory> X<message> X<semáforo> X<memoria compartida> X<memoria> X<mensaje>
=for Pod::Functions =SysV
L<C<msgctl>|/msgctl ID,CMD,ARG>, L<C<msgget>|/msgget CLAVE,INDICADORES>,
L<C<msgrcv>|/msgrcv ID,VAR,TAMAÃO,TIPO,INDICADORES>, L<C<msgsnd>|/msgsnd
ID,MSG,INDICADORES>, L<C<semctl>|/semctl ID,SEMNUM,CMD,ARG>,
L<C<semget>|/semget CLAVE,NSEMS,INDICADORES>, L<C<semop>|/semop
CLAVE,OPSTRING>, L<C<shmctl>|/shmctl ID,CMD,ARG>, L<C<shmget>|/shmget
CLAVE,TAMAÃO,INDICADORES>, L<C<shmread>|/shmread ID,VAR,POSICIÃN,TAMAÃO>,
L<C<shmwrite>|/shmwrite ID,CADENA,POSICIÃN,TAMAÃO>
=item Obtener información de usuarios y grupos
X<user> X<group> X<password> X<uid> X<gid> X<passwd> X</etc/passwd> X<usuario> X<grupo> X<contraseña>
=for Pod::Functions =User
L<C<endgrent>|/endgrent>, L<C<endhostent>|/endhostent>,
L<C<endnetent>|/endnetent>, L<C<endpwent>|/endpwent>, L<C<getgrent>|/getgrent>,
L<C<getgrgid>|/getgrgid GID>, L<C<getgrnam>|/getgrnam NOMBRE>,
L<C<getlogin>|/getlogin>, L<C<getpwent>|/getpwent>, L<C<getpwnam>|/getpwnam
NOMBRE>, L<C<getpwuid>|/getpwuid UID>, L<C<setgrent>|/setgrent>,
L<C<setpwent>|/setpwent>
=item Obtener información de la red
X<network> X<protocol> X<host> X<hostname> X<IP> X<address> X<service> X<red> X<protocolo> X<servidor> X<dirección> X<servicio>
=for Pod::Functions =Network
L<C<endprotoent>|/endprotoent>, L<C<endservent>|/endservent>,
L<C<gethostbyaddr>|/gethostbyaddr DIRECCIÃN,TIPODIR>,
L<C<gethostbyname>|/gethostbyname NOMBRE>, L<C<gethostent>|/gethostent>,
L<C<getnetbyaddr>|/getnetbyaddr DIRECCIÃN,TIPODIR>,
L<C<getnetbyname>|/getnetbyname NOMBRE>, L<C<getnetent>|/getnetent>,
L<C<getprotobyname>|/getprotobyname NOMBRE>,
L<C<getprotobynumber>|/getprotobynumber NÃMERO>,
L<C<getprotoent>|/getprotoent>, L<C<getservbyname>|/getservbyname
NOMBRE,PROTOCOLO>, L<C<getservbyport>|/getservbyport PUERTO,PROTOCOLO>,
L<C<getservent>|/getservent>, L<C<sethostent>|/sethostent SIGUEABIERTO>,
L<C<setnetent>|/setnetent SIGUEABIERTO>, L<C<setprotoent>|/setprotoent
SIGUEABIERTO>, L<C<setservent>|/setservent SIGUEABIERTO>
=item Funciones relacionadas con el tiempo
X<time> X<date>
=for Pod::Functions =Time
L<C<gmtime>|/gmtime EXPR>, L<C<localtime>|/localtime EXPR>, L<C<time>|/time>,
L<C<times>|/times>
=item Palabras clave que no son funciones
=for Pod::Functions =!Non-functions
C<and>, C<AUTOLOAD>, C<BEGIN>, C<CHECK>, C<cmp>, C<CORE>, C<__DATA__>,
C<default>, C<DESTROY>, C<else>, C<elseif>, C<elsif>, C<END>, C<__END__>,
C<eq>, C<for>, C<foreach>, C<ge>, C<given>, C<gt>, C<if>, C<INIT>, C<le>,
C<lt>, C<ne>, C<not>, C<or>, C<UNITCHECK>, C<unless>, C<until>, C<when>,
C<while>, C<x>, C<xor>
=back
=head2 Portabilidad
X<portability> X<Unix> X<portable> X<portabilidad>
Perl nació en Unix y por eso puede acceder a todas las llamadas normales del
sistema Unix. En entornos no Unix, la funcionalidad de algunas llamadas del
sistema Unix pueden no estar disponibles, o los detalles de la funcionalidad
disponible pueden diferir ligeramente. Las funciones Perl afectadas por esto
son:
L<C<-I<X>>|/-X IDENTIFICADOR_ARCHIVO>, L<C<binmode>|/binmode
IDENTIFICADOR_ARCHIVO, CAPA>, L<C<chmod>|/chmod LISTA>, L<C<chown>|/chown
LISTA>, L<C<chroot>|/chroot NOMBRE_ARCHIVO>, L<C<crypt>|/crypt
TEXTOPLANO,SALTO>, L<C<dbmclose>|/dbmclose HASH>, L<C<dbmopen>|/dbmopen
HASH,NOMBRE_BASE_DATOS,MÃSCARA>, L<C<dump>|/dump ETIQUETA>,
L<C<endgrent>|/endgrent>, L<C<endhostent>|/endhostent>,
L<C<endnetent>|/endnetent>, L<C<endprotoent>|/endprotoent>,
L<C<endpwent>|/endpwent>, L<C<endservent>|/endservent>, L<C<exec>|/exec LISTA>,
L<C<fcntl>|/fcntl IDENTIFICADOR_ARCHIVO,FUNCIÃN,ESCALAR>, L<C<flock>|/flock
IDENTIFICADOR_ARCHIVO,OPERACIÃN>, L<C<fork>|/fork>, L<C<getgrent>|/getgrent>,
L<C<getgrgid>|/getgrgid GID>, L<C<gethostbyname>|/gethostbyname NOMBRE>,
L<C<gethostent>|/gethostent>, L<C<getlogin>|/getlogin>,
L<C<getnetbyaddr>|/getnetbyaddr DIRECCIÃN,TIPODIR>,
L<C<getnetbyname>|/getnetbyname NOMBRE>, L<C<getnetent>|/getnetent>,
L<C<getppid>|/getppid>, L<C<getpgrp>|/getpgrp PID>,
L<C<getpriority>|/getpriority CUÃL,QUIÃN>,
L<C<getprotobynumber>|/getprotobynumber NÃMERO>,
L<C<getprotoent>|/getprotoent>, L<C<getpwent>|/getpwent>,
L<C<getpwnam>|/getpwnam NOMBRE>, L<C<getpwuid>|/getpwuid UID>,
L<C<getservbyport>|/getservbyport PUERTO,PROTOCOLO>,
L<C<getservent>|/getservent>, L<C<getsockopt>|/getsockopt
SOCKET,NIVEL,OPCIÃN>, L<C<glob>|/glob EXPR>, L<C<ioctl>|/ioctl
IDENTIFICADOR_ARCHIVO,FUNCIÃN,ESCALAR>, L<C<kill>|/kill SEÃAL, LISTA>,
L<C<link>|/link ARCHIVO_VIEJO,ARCHIVO_NUEVO>, L<C<lstat>|/lstat
IDENTIFICADOR_ARCHIVO>, L<C<msgctl>|/msgctl ID,CMD,ARG>, L<C<msgget>|/msgget
CLAVE,INDICADORES>, L<C<msgrcv>|/msgrcv ID,VAR,TAMAÃO,TIPO,INDICADORES>,
L<C<msgsnd>|/msgsnd ID,MSG,INDICADORES>, L<C<open>|/open
IDENTIFICADOR_ARCHIVO,EXPR>, L<C<pipe>|/pipe
IDENTIFICADOR_LECTURA,IDENTIFICADOR_ESCRITURA>, L<C<readlink>|/readlink EXPR>,
L<C<rename>|/rename NOMBRE_VIEJO,NOMBRE_NUEVO>, L<C<select>|/select
RBITS,WBITS,EBITS,TIEMPO_ESPERA>, L<C<semctl>|/semctl ID,SEMNUM,CMD,ARG>,
L<C<semget>|/semget CLAVE,NSEMS,INDICADORES>, L<C<semop>|/semop
CLAVE,OPSTRING>, L<C<setgrent>|/setgrent>, L<C<sethostent>|/sethostent
SIGUEABIERTO>, L<C<setnetent>|/setnetent SIGUEABIERTO>, L<C<setpgrp>|/setpgrp
PID,PGRP>, L<C<setpriority>|/setpriority CUÃL,QUIÃN,PRIORIDAD>,
L<C<setprotoent>|/setprotoent SIGUEABIERTO>, L<C<setpwent>|/setpwent>,
L<C<setservent>|/setservent SIGUEABIERTO>, L<C<setsockopt>|/setsockopt
SOCKET,NIVEL,OPCIÃN_NOMBRE,OPCIÃN_VALOR>, L<C<shmctl>|/shmctl ID,CMD,ARG>,
L<C<shmget>|/shmget CLAVE,TAMAÃO,INDICADORES>, L<C<shmread>|/shmread
ID,VAR,POSICIÃN,TAMAÃO>, L<C<shmwrite>|/shmwrite
ID,CADENA,POSICIÃN,TAMAÃO>, L<C<socket>|/socket
SOCKET,DOMINIO,TIPO,PROTOCOLO>, L<C<socketpair>|/socketpair
SOCKET1,SOCKET2,DOMINIO,TIPO,PROTOCOLO>, L<C<stat>|/stat
IDENTIFICADOR_ARCHIVO>, L<C<symlink>|/symlink ARCHIVO_VIEJO,ARCHIVO_NUEVO>,
L<C<syscall>|/syscall NÃMERO, LISTA>, L<C<sysopen>|/sysopen
IDENTIFICADOR_ARCHIVO,NOMBRE_ARCHIVO,MODO>, L<C<system>|/system LISTA>,
L<C<times>|/times>, L<C<truncate>|/truncate IDENTIFICADOR_ARCHIVO,LONGITUD>,
lib/POD2/ES/perlfunc.pod view on Meta::CPAN
enviar.
=item setpgrp PID,PGRP
X<setpgrp> X<group>
=for Pod::Functions set the process group of a process
Establece el grupo de procesos en curso para el PID especificado, C<0> para el
proceso actual. Eleva una excepción si se usa en una máquina que no
implemente POSIX L<setpgid(2)> o BSD L<setpgrp(2)>. Si los argumentos se
omiten, el valor predeterminado es C<0,0>. Tenga en cuenta que la versión de
BSD 4.2 de L<C<setpgrp>|/setpgrp PID,PGRP> no acepta ningún argumento, por lo
que sólo C<setpgrp(0,0)> es portátil. Vea también
L<C<POSIX::setsid()>|POSIX/C<setsid>>.
Cuestiones de portabilidad: L<perlport/setpgrp>.
=item setpriority CUÃL,QUIÃN,PRIORIDAD
X<setpriority> X<priority> X<nice> X<renice> X<prioridad>
=for Pod::Functions set a process's nice value
Devuelve la prioridad actual de un proceso, un grupo de procesos o un usuario.
(Vea L<setpriority(2)>). Lanza una excepción si se usa en una máquina que no
implementa L<setpriority(2)>.
Cuestiones de portabilidad: L<perlport/setpriority>.
=item setsockopt SOCKET,NIVEL,OPCIÃN_NOMBRE,OPCIÃN_VALOR
X<setsockopt>
=for Pod::Functions set some socket options
Establece la opción de socket solicitada. Devuelve L<C<undef>|/undef EXPR> en
caso de error. Utilice constantes enteras proporcionadas por el módulo
L<C<Socket>|Socket> para NIVEL y OPCIÃN_NOMBRE. Los valores para NIVEL
también se pueden obtener de getprotobyname. OPCIÃN_VALOR podrÃa ser una
cadena empaquetada o un entero. Un entero como OPCIÃN_VALOR es la abreviatura
de pack("i", OPCIÃN_VALOR).
Un ejemplo para deshabilitar el algoritmo de Nagle del socket:
use Socket qw(IPPROTO_TCP TCP_NODELAY);
setsockopt($socket, IPPROTO_TCP, TCP_NODELAY, 1);
Cuestiones de portabilidad: L<perlport/setsockopt>.
=item shift ARRAY
X<shift>
=item shift
=for Pod::Functions remove the first element of an array, and return it
Extrae el primer valor del array y lo devuelve, acortando el array en uno y
moviendo todos los demás hacia arriba. Si no hay elementos en el array,
devuelve el valor undef. Si se omite ARRAY, se desplaza el array
L<C<@_>|perlvar/@_> dentro del ámbito léxico de subrutinas y formatos, y el
array L<C<@ARGV>|perlvar/@ARGV> si está fuera de una subrutina y también
dentro de los ámbitos léxicos establecidos por construcciones como C<eval
CADENA>, C<BEGIN {}>, C<INIT {}>, C<CHECK {}>, C<UNITCHECK {}> y C<END {}>.
A partir de Perl 5.14, una caracterÃstica experimental permitÃa a
L<C<shift>|/shift ARRAY> tomar una expresión escalar. Se ha considerado que
este experimento no ha funcionado, y se quitó a partir de Perl 5.24.
Vea también L<C<unshift>|/unshift ARRAY,LISTA>, L<C<push>|/push ARRAY,LISTA>,
y L<C<pop>|/pop ARRAY>. L<C<shift>|/shift ARRAY> y L<C<unshift>|/unshift
ARRAY,LISTA> hacen lo mismo con el extremo izquierdo de un array que
L<C<pop>|/pop ARRAY> y L<C<push>|/push ARRAY,LISTA> lo hacen para el extremo
derecho.
=item shmctl ID,CMD,ARG
X<shmctl>
=for Pod::Functions SysV shared memory operations
Llama a la función System V IPC shmctl(2). Probablemente escribirá
use IPC::SysV;
primero para obtener las definiciones de las constantes. Si CMD es C<IPC_STAT>,
entonces ARG debe ser una variable que contendrá la estructura C<shmid_ds>
devuelta. Devuelve lo mismo que ioctl: L<C<undef>|/undef EXPR> para error;
"C<0> but true" para cero; o el valor de retorno real, en cualquier otro caso.
Vea también L<perlipc/"SysV IPC"> y la documentación de
L<C<IPC::SysV>|IPC::SysV>.
Cuestiones de portabilidad: L<perlport/shmctl>.
=item shmget CLAVE,TAMAÃO,INDICADORES
X<shmget>
=for Pod::Functions get SysV shared memory segment identifier
Llama a la función System V IPC shmget(2). Devuelve el identificador de la
memoria compartida, o L<C<undef>|/undef EXPR> en caso de error. Vea también
L<perlipc/"SysV IPC"> y la documentación de L<C<IPC::SysV>|IPC::SysV>.
Cuestiones de portabilidad: L<perlport/shmget>.
=item shmread ID,VAR,POSICIÃN,TAMAÃO
X<shmread> X<shmwrite>
=for Pod::Functions read SysV shared memory
=item shmwrite ID,CADENA,POSICIÃN,TAMAÃO
=for Pod::Functions write SysV shared memory
Lee o escribe en el segmento ID de memoria compartida System V a partir de la
POSICIÃN para el TAMAÃO indicado, añadiéndose a ella, copiando la
entrada/salida, y desuniéndose de ella. Al leer, VAR debe ser una variable que
contendrá los datos leÃdos. Al escribir, si CADENA es demasiado larga, sólo
se utilizan TAMAÃO bytes; si CADENA es demasiado corta, se escriben nulos para
llenar TAMAÃO bytes. Devuelve verdadero si tuvo éxito, falso en caso de
error. L<C<shmread>|/shmread ID,VAR,POSICIÃN,TAMAÃO> contamina la variable.
Vea también L<perlipc/"SysV IPC"> y la documentación del módulo
L<C<IPC::SysV>|IPC::SysV> y L<C<IPC::Shareable>|IPC::Shareable> en CPAN.
Cuestiones de portabilidad: L<perlport/shmread> y L<perlport/shmwrite>.
lib/POD2/ES/perlfunc.pod view on Meta::CPAN
=item waitpid PID,INDICADORES
X<waitpid>
=for Pod::Functions wait for a particular child process to die
Espera que termine un proceso hijo en particular y devuelve el PID del proceso
que ha fallecido, o C<-1> si no existe tal proceso hijo. Una espera no
bloqueante (con L<WNOHANG|POSIX/C<WNOHANG>> en FLAGS) puede devolver 0 si
existe algún proceso hijo coincidente con el PID, pero que aún no terminado.
El estado se devuelve en L<C<$?>|perlvar/$?> y
L<C<${^CHILD_ERROR_NATIVE}>|perlvar/${^CHILD_ERROR_NATIVE}>.
Un PID de C<0> indica esperar por cualquier proceso hijo cuyo ID de grupo de
proceso es igual al del proceso actual. Un PID de menos que C<-1> indica
esperar por cualquier proceso hijo cuyo ID de grupo de proceso es igual a -PID.
Un PID de C<-1> indica esperar por cualquier proceso hijo.
Si dice
use POSIX ":sys_wait_h";
my $kid;
do {
$hijo = waitpid(-1, WNOHANG);
} while $hijo > 0;
o bien
1 while waitpid(-1, WNOHANG) > 0;
entonces puede hacer una espera no bloqueante para todos los procesos zombie
pendientes (vea L<POSIX/WAIT>). Espera no bloqueante está disponible en
máquinas que soporten las llamadas del sistema, tanto L<waitpid(2)> como
L<wait4(2)>. Sin embargo, esperar por un particular pid con INDICADORES a C<0>
está implementado en todas partes. (Perl emula la llamada al sistema,
recordando los valores de estado de los procesos que han salido, pero que
todavÃa no se han recolectado por el script Perl).
Tenga en cuenta que en algunos sistemas, un valor devuelto de C<-1> podrÃa
significar que los procesos hijos se están automáticamente desechando. Ver
L<perlipc> para más detalles, y para otros ejemplos.
Cuestiones de portabilidad: L<perlport/waitpid>.
=item wantarray
X<wantarray> X<context> X<contexto>
=for Pod::Functions get void vs scalar vs list context of current subroutine call
Devuelve verdadero si el contexto de ejecución de la subrutina actual o
L<C<eval>|/eval EXPR> está buscando por una lista de valores. Devuelve falso
si el contexto está buscando por un escalar. Devuelve el valor indefinido si
el contexto está buscando por ningún valor (contexto void).
return unless defined wantarray; # no nos molestamos más
my @a = calculo_complejo();
return wantarray ? @a : "@a";
El resultado de L<C<wantarray>|/wantarray> no está especificado en el nivel
superior de un archivo, en un C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT> o
bloque C<END>, o en un método C<DESTROY>.
Esta función deberÃa haber sido nombrada wantlist().
=item warn LISTA
X<warn> X<warning> X<STDERR> X<avisos>
=for Pod::Functions print debugging info
Imprime el valor de LISTA a STDERR. Si el último elemento de LISTA no termina
en un salto de lÃnea, se añade el archivo/número de lÃnea de texto igual
como lo hace L<C<die>|/die LISTA>.
Si la salida está vacÃa y L<C<$@>|perlvar/$@> ya contiene un valor
(tÃpicamente de un eval anterior) este valor se utiliza después de añadirle
C<"\t...caught"> a L<C<$@>|perlvar/$@>. Esto es útil para mantenerse casi,
pero no del todo, similar a L<C<die>|/die LISTA>.
Si L<C<$@>|perlvar/$@> está vacÃa entonces se usa la cadena C<"Warning:
Something's wrong">.
Ningún mensaje se imprime si hay instalado un controlador
L<C<$SIG{__WARN__}>|perlvar/%SIG>. Es responsabilidad del controlador tratar el
mensaje como lo considere oportuno (como, por ejemplo, convertirlo en un
L<C<die>|/die LISTA>). La mayorÃa de los controladores, por lo tanto, deben
hacer los arreglos necesarios para realmente mostrar las advertencias de las
que no están preparados para hacer frente, llamando a L<C<warn>|/warn LISTA>
de nuevo en el controlador. Tenga en cuenta que esto es bastante seguro y no
producirá un bucle sin fin, puesto que los enganches C<__WARN__> no son
llamados desde el interior de uno mismo.
Encontrará que este comportamiento es ligeramente diferente a la de los
controladores L<C<$SIG{__DIE__}>|perlvar/%SIG> (que no suprimen el texto de
error, pero puede llamar, en su lugar, a L<C<die>|/die LISTA> de nuevo para
cambiarlo).
El uso de un controlador C<__WARN__> proporciona una poderosa manera de
silenciar a todas las advertencias (incluso las no menos llamadas
obligatorias). Un ejemplo:
# limpiar *todas* las advertencias en tiempo de compilación
BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
my $foo = 10;
my $foo = 20; # no avisa de un my $foo duplicado,
# pero bueno, ¡tú lo has querido asÃ!
# no advertencias en compilación o ejecución antes de aquÃ
$DOWARN = 1;
# advertencias en ejecución activas desde aquÃ
warn "\$foo está vivo y $foo!"; # lo muestra
Vea L<perlvar> para más detalles sobre la configuración de las entradas
L<C<%SIG>|perlvar/%SIG> y para ver más ejemplos. Vea el módulo L<Carp> para
otros tipos de avisos mediante sus funciones C<carp> y C<cluck>.
=item write IDENTIFICADOR_ARCHIVO
X<write>
=item write EXPR
lib/POD2/ES/perlfunc.pod view on Meta::CPAN
El procesado del comienzo del formulario se gestiona de forma automática: si
no hay suficiente espacio en la página actual para el registro formateado, la
página se desplaza escribiendo un avance de página y se utiliza un formato
especial de principio de página para dar formato al encabezado de la nueva
página antes de que el registro sea escrito. De manera predeterminada, el
formato de la parte superior de la página es el nombre del identificador de
archivo con el sufijo C<_TOP> añadido, o C<top> en el paquete actual si lo
primero no existe. Esto podrÃa ser un problema con identificadores de archivo
autovivificados, pero puede ser configurada de forma dinámica con el formato
de su elección mediante la asignación del nombre a la variable
L<C<$^>|perlvar/$^> mientras esté seleccionado el identificador de archivo. El
número de lÃneas restantes de la página actual está en la variable
L<C<$->|perlvar/$->, que se puede fijar a C<0> para forzar una nueva página.
Si no se especifica IDENTIFICADOR_ARCHIVO, la salida va al canal predeterminado
de salida actual, que suele ser STDOUT, pero puede se modificar por el operador
L<C<select>|/select IDENTIFICADOR_ARCHIVO>. Si el IDENTIFICADOR_ARCHIVO es una
EXPR, entonces la expresión se evalúa y la cadena resultante se utiliza para
buscar el nombre del IDENTIFICADOR_ARCHIVO en tiempo de ejecución. Para más
información sobre formatos, vea L<perlform>.
Tenga en cuenta que write I<no> es lo contrario de L<C<read>|/read
IDENTIFICADOR_ARCHIVO,ESCALAR,LONGITUD,DESPLAZAMIENTO>. Por desgracia.
=item y///
=for Pod::Functions transliterate a string
El operador de transliteración. Lo mismo que
L<C<trE<sol>E<sol>E<sol>>|/trE<sol>E<sol>E<sol>>. Vea L<perlop/"Operadores
entrecomillados">.
=back
=head2 Referencias externas a identificadores que no son funciones
=head3 perldata
=over
=item __DATA__
=item __END__
Estas palabras clave están documentadas en L<perldata/"Literales especiales">.
=back
=head3 perlmod
=over
=item BEGIN
=item CHECK
=item END
=item INIT
=item UNITCHECK
Estas palabras clave de la fase de compilación están documentadas en
L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT y END">.
=back
=head3 perlobj
=over
=item DESTROY
Esta palabra clave de método está documentada en L<perlobj/"Destructores">.
=back
=head3 perlop
=over
=item and
=item cmp
=item eq
=item ge
=item gt
=item le
=item lt
=item ne
=item not
=item or
=item x
=item xor
Estos operadores están documentados en L<perlop>.
=back
=head3 perlsub
=over
=item AUTOLOAD
Esta palabra clave está documentada en L<perlsub/"Autocarga">.
=back
=head3 perlsyn
=over
=item else
( run in 2.077 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )