.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Math::GSL::MatrixComplex 3pm" .TH Math::GSL::MatrixComplex 3pm "2019-02-23" "perl v5.28.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Math::GSL::MatrixComplex \- Complex Matrices .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 6 \& use Math::GSL::MatrixComplex qw/:all/; \& my $matrix1 = Math::GSL::MatrixComplex\->new(5,5); # OO interface \& my $matrix3 = $matrix1 + $matrix1; \& my $matrix4 = $matrix1 \- $matrix1; \& if($matrix1 == $matrix4) ... \& if($matrix1 != $matrix3) ... \& \& my $matrix2 = gsl_matrix_complex_alloc(5,5); # standard interface .Ve .SH "Objected Oriented Interface to GSL Math::GSL::MatrixComplex" .IX Header "Objected Oriented Interface to GSL Math::GSL::MatrixComplex" .SS "\fBnew()\fP" .IX Subsection "new()" Creates a new MatrixComplex object of the given size. .PP .Vb 1 \& my $matrix = Math::GSL::MatrixComplex\->new(10,10); .Ve .SS "\fBraw()\fP" .IX Subsection "raw()" Get the underlying \s-1GSL\s0 matrix object created by \s-1SWIG,\s0 useful for using gsl_matrix_* functions which do not have an \s-1OO\s0 counterpart. .PP .Vb 3 \& my $matrix = Math::GSL::MatrixComplex\->new(3,3); \& my $gsl_matrix = $matrix\->raw; \& my $stuff = gsl_matrix_complex_get($gsl_matrix, 1, 2); .Ve .SS "\fBrows()\fP" .IX Subsection "rows()" Returns the number of rows in the matrix. .PP .Vb 1 \& my $rows = $matrix\->rows; .Ve .SS "\fBcols()\fP" .IX Subsection "cols()" Returns the number of columns in the matrix. .PP .Vb 1 \& my $cols = $matrix\->cols; .Ve .SS "\fBas_vector()\fP" .IX Subsection "as_vector()" Returns a 1xN or Nx1 matrix as a Math::GSL::VectorComplex object. Dies if called on a matrix that is not a single row or column. Useful for turning the output of \f(CW\*(C`col()\*(C'\fR or \f(CW\*(C`row()\*(C'\fR into a vector, like so: .PP .Vb 2 \& my $vector1 = $matrix\->col(0)\->as_vector; \& my $vector2 = $matrix\->row(1)\->as_vector; .Ve .SS "\fBas_list()\fP" .IX Subsection "as_list()" Get the contents of a Math::GSL::Matrix object as a Perl list. .PP .Vb 3 \& my $matrix = Math::GSL::MatrixComplex\->new(3,3); \& ... \& my @matrix = $matrix\->as_list; .Ve .SS "\fBrow()\fP" .IX Subsection "row()" Returns a row matrix of the row you enter. .PP .Vb 3 \& my $matrix = Math::GSL::MatrixComplex\->new(3,3); \& ... \& my $matrix_row = $matrix\->row(0); .Ve .SS "\fBcol()\fP" .IX Subsection "col()" Returns a col matrix of the column you enter. .PP .Vb 3 \& my $matrix = Math::GSL::MatrixComplex\->new(3,3); \& ... \& my $matrix_col = $matrix\->col(0); .Ve .SS "\fBset_row()\fP" .IX Subsection "set_row()" Sets a the values of a row with the elements of an array. .PP .Vb 2 \& my $matrix = Math::GSL::MatrixComplex\->new(3,3); \& $matrix\->set_row(0, [8, 6, 2]); .Ve .PP You can also set multiple rows at once with chained calls: my \f(CW$matrix\fR = Math::GSL::MatrixComplex\->new(3,3); \f(CW$matrix\fR\->set_row(0, [8, 6, 2]) \->set_row(1, [2, 4, 1]); ... .SS "\fBset_col()\fP" .IX Subsection "set_col()" Sets a the values of a column with the elements of an array. .PP .Vb 2 \& my $matrix = Math::GSL::MatrixComplex\->new(3,3); \& $matrix\->set_col(0, [8, 6, 2]); .Ve .PP You can also set multiple columns at once with chained calls: my \f(CW$matrix\fR = Math::GSL::MatrixComplex\->new(3,3); \f(CW$matrix\fR\->set_col(0, [8, 6, 2]) \->set_col(1, [2, 4, 1]); ... .SS "\fBis_square()\fP" .IX Subsection "is_square()" Returns true if a matrix is square, i.e. it has the same number of rows as columns, false otherwise. .SS "\fBdet()\fP" .IX Subsection "det()" Returns the determinant of a matrix (computed by \s-1LU\s0 decomposition) or dies if called on a non-square matrix. .PP .Vb 1 \& my $det = $matrix\->det(); .Ve .SS "\fBzero()\fP" .IX Subsection "zero()" Set a matrix to the zero matrix. .PP .Vb 1 \& $matrix\->zero; .Ve .SS "\fBidentity()\fP" .IX Subsection "identity()" Set a matrix to the identity matrix, i.e. one on the diagonal and zero elsewhere. .PP .Vb 1 \& my $I = $matrix\->identity; .Ve .SS "\fBinverse()\fP" .IX Subsection "inverse()" Returns the inverse of a matrix or dies when called on a non-square matrix. .PP .Vb 1 \& my $inverse = $matrix\->inverse; .Ve .SS "\fBis_hermitian()\fP" .IX Subsection "is_hermitian()" Returns true if the matrix is hermitian, false otherwise .PP .Vb 1 \& my $test = $matrix\->is_hermitian; .Ve .SS "\fBeigenvalues()\fP" .IX Subsection "eigenvalues()" .SS "\fBlndet()\fP" .IX Subsection "lndet()" Returns the natural log of the absolute value of the determinant of a matrix (computed by \s-1LU\s0 decomposition) or dies if called on a non-square matrix. .PP .Vb 1 \& my $lndet = $matrix\->lndet(); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" .ie n .IP """gsl_matrix_complex_alloc """ 1 .el .IP "\f(CWgsl_matrix_complex_alloc \fR" 1 .IX Item "gsl_matrix_complex_alloc " .PD 0 .ie n .IP """gsl_matrix_complex_calloc """ 1 .el .IP "\f(CWgsl_matrix_complex_calloc \fR" 1 .IX Item "gsl_matrix_complex_calloc " .ie n .IP """gsl_matrix_complex_alloc_from_block """ 1 .el .IP "\f(CWgsl_matrix_complex_alloc_from_block \fR" 1 .IX Item "gsl_matrix_complex_alloc_from_block " .ie n .IP """gsl_matrix_complex_alloc_from_matrix """ 1 .el .IP "\f(CWgsl_matrix_complex_alloc_from_matrix \fR" 1 .IX Item "gsl_matrix_complex_alloc_from_matrix " .ie n .IP """gsl_vector_complex_alloc_row_from_matrix """ 1 .el .IP "\f(CWgsl_vector_complex_alloc_row_from_matrix \fR" 1 .IX Item "gsl_vector_complex_alloc_row_from_matrix " .ie n .IP """gsl_vector_complex_alloc_col_from_matrix """ 1 .el .IP "\f(CWgsl_vector_complex_alloc_col_from_matrix \fR" 1 .IX Item "gsl_vector_complex_alloc_col_from_matrix " .ie n .IP """gsl_matrix_complex_free """ 1 .el .IP "\f(CWgsl_matrix_complex_free \fR" 1 .IX Item "gsl_matrix_complex_free " .ie n .IP """gsl_matrix_complex_submatrix """ 1 .el .IP "\f(CWgsl_matrix_complex_submatrix \fR" 1 .IX Item "gsl_matrix_complex_submatrix " .ie n .IP """gsl_matrix_complex_row """ 1 .el .IP "\f(CWgsl_matrix_complex_row \fR" 1 .IX Item "gsl_matrix_complex_row " .ie n .IP """gsl_matrix_complex_column """ 1 .el .IP "\f(CWgsl_matrix_complex_column \fR" 1 .IX Item "gsl_matrix_complex_column " .ie n .IP """gsl_matrix_complex_diagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_diagonal \fR" 1 .IX Item "gsl_matrix_complex_diagonal " .ie n .IP """gsl_matrix_complex_subdiagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_subdiagonal \fR" 1 .IX Item "gsl_matrix_complex_subdiagonal " .ie n .IP """gsl_matrix_complex_superdiagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_superdiagonal \fR" 1 .IX Item "gsl_matrix_complex_superdiagonal " .ie n .IP """gsl_matrix_complex_subrow """ 1 .el .IP "\f(CWgsl_matrix_complex_subrow \fR" 1 .IX Item "gsl_matrix_complex_subrow " .ie n .IP """gsl_matrix_complex_subcolumn """ 1 .el .IP "\f(CWgsl_matrix_complex_subcolumn \fR" 1 .IX Item "gsl_matrix_complex_subcolumn " .ie n .IP """gsl_matrix_complex_view_array """ 1 .el .IP "\f(CWgsl_matrix_complex_view_array \fR" 1 .IX Item "gsl_matrix_complex_view_array " .ie n .IP """gsl_matrix_complex_view_array_with_tda """ 1 .el .IP "\f(CWgsl_matrix_complex_view_array_with_tda \fR" 1 .IX Item "gsl_matrix_complex_view_array_with_tda " .ie n .IP """gsl_matrix_complex_view_vector """ 1 .el .IP "\f(CWgsl_matrix_complex_view_vector \fR" 1 .IX Item "gsl_matrix_complex_view_vector " .ie n .IP """gsl_matrix_complex_view_vector_with_tda """ 1 .el .IP "\f(CWgsl_matrix_complex_view_vector_with_tda \fR" 1 .IX Item "gsl_matrix_complex_view_vector_with_tda " .ie n .IP """gsl_matrix_complex_const_submatrix """ 1 .el .IP "\f(CWgsl_matrix_complex_const_submatrix \fR" 1 .IX Item "gsl_matrix_complex_const_submatrix " .ie n .IP """gsl_matrix_complex_const_row """ 1 .el .IP "\f(CWgsl_matrix_complex_const_row \fR" 1 .IX Item "gsl_matrix_complex_const_row " .ie n .IP """gsl_matrix_complex_const_column """ 1 .el .IP "\f(CWgsl_matrix_complex_const_column \fR" 1 .IX Item "gsl_matrix_complex_const_column " .ie n .IP """gsl_matrix_complex_const_diagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_const_diagonal \fR" 1 .IX Item "gsl_matrix_complex_const_diagonal " .ie n .IP """gsl_matrix_complex_const_subdiagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_const_subdiagonal \fR" 1 .IX Item "gsl_matrix_complex_const_subdiagonal " .ie n .IP """gsl_matrix_complex_const_superdiagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_const_superdiagonal \fR" 1 .IX Item "gsl_matrix_complex_const_superdiagonal " .ie n .IP """gsl_matrix_complex_const_subrow """ 1 .el .IP "\f(CWgsl_matrix_complex_const_subrow \fR" 1 .IX Item "gsl_matrix_complex_const_subrow " .ie n .IP """gsl_matrix_complex_const_subcolumn """ 1 .el .IP "\f(CWgsl_matrix_complex_const_subcolumn \fR" 1 .IX Item "gsl_matrix_complex_const_subcolumn " .ie n .IP """gsl_matrix_complex_const_view_array """ 1 .el .IP "\f(CWgsl_matrix_complex_const_view_array \fR" 1 .IX Item "gsl_matrix_complex_const_view_array " .ie n .IP """gsl_matrix_complex_const_view_array_with_tda """ 1 .el .IP "\f(CWgsl_matrix_complex_const_view_array_with_tda \fR" 1 .IX Item "gsl_matrix_complex_const_view_array_with_tda " .ie n .IP """gsl_matrix_complex_const_view_vector """ 1 .el .IP "\f(CWgsl_matrix_complex_const_view_vector \fR" 1 .IX Item "gsl_matrix_complex_const_view_vector " .ie n .IP """gsl_matrix_complex_const_view_vector_with_tda """ 1 .el .IP "\f(CWgsl_matrix_complex_const_view_vector_with_tda \fR" 1 .IX Item "gsl_matrix_complex_const_view_vector_with_tda " .ie n .IP """gsl_matrix_complex_get""" 1 .el .IP "\f(CWgsl_matrix_complex_get\fR" 1 .IX Item "gsl_matrix_complex_get" .ie n .IP """gsl_matrix_complex_set""" 1 .el .IP "\f(CWgsl_matrix_complex_set\fR" 1 .IX Item "gsl_matrix_complex_set" .ie n .IP """gsl_matrix_complex_ptr""" 1 .el .IP "\f(CWgsl_matrix_complex_ptr\fR" 1 .IX Item "gsl_matrix_complex_ptr" .ie n .IP """gsl_matrix_complex_const_ptr""" 1 .el .IP "\f(CWgsl_matrix_complex_const_ptr\fR" 1 .IX Item "gsl_matrix_complex_const_ptr" .ie n .IP """gsl_matrix_complex_set_zero """ 1 .el .IP "\f(CWgsl_matrix_complex_set_zero \fR" 1 .IX Item "gsl_matrix_complex_set_zero " .ie n .IP """gsl_matrix_complex_set_identity """ 1 .el .IP "\f(CWgsl_matrix_complex_set_identity \fR" 1 .IX Item "gsl_matrix_complex_set_identity " .ie n .IP """gsl_matrix_complex_set_all """ 1 .el .IP "\f(CWgsl_matrix_complex_set_all \fR" 1 .IX Item "gsl_matrix_complex_set_all " .ie n .IP """gsl_matrix_complex_fread """ 1 .el .IP "\f(CWgsl_matrix_complex_fread \fR" 1 .IX Item "gsl_matrix_complex_fread " .ie n .IP """gsl_matrix_complex_fwrite """ 1 .el .IP "\f(CWgsl_matrix_complex_fwrite \fR" 1 .IX Item "gsl_matrix_complex_fwrite " .ie n .IP """gsl_matrix_complex_fscanf """ 1 .el .IP "\f(CWgsl_matrix_complex_fscanf \fR" 1 .IX Item "gsl_matrix_complex_fscanf " .ie n .IP """gsl_matrix_complex_fprintf """ 1 .el .IP "\f(CWgsl_matrix_complex_fprintf \fR" 1 .IX Item "gsl_matrix_complex_fprintf " .ie n .IP """gsl_matrix_complex_memcpy""" 1 .el .IP "\f(CWgsl_matrix_complex_memcpy\fR" 1 .IX Item "gsl_matrix_complex_memcpy" .ie n .IP """gsl_matrix_complex_swap""" 1 .el .IP "\f(CWgsl_matrix_complex_swap\fR" 1 .IX Item "gsl_matrix_complex_swap" .ie n .IP """gsl_matrix_complex_swap_rows""" 1 .el .IP "\f(CWgsl_matrix_complex_swap_rows\fR" 1 .IX Item "gsl_matrix_complex_swap_rows" .ie n .IP """gsl_matrix_complex_swap_columns""" 1 .el .IP "\f(CWgsl_matrix_complex_swap_columns\fR" 1 .IX Item "gsl_matrix_complex_swap_columns" .ie n .IP """gsl_matrix_complex_swap_rowcol""" 1 .el .IP "\f(CWgsl_matrix_complex_swap_rowcol\fR" 1 .IX Item "gsl_matrix_complex_swap_rowcol" .ie n .IP """gsl_matrix_complex_transpose """ 1 .el .IP "\f(CWgsl_matrix_complex_transpose \fR" 1 .IX Item "gsl_matrix_complex_transpose " .ie n .IP """gsl_matrix_complex_transpose_memcpy """ 1 .el .IP "\f(CWgsl_matrix_complex_transpose_memcpy \fR" 1 .IX Item "gsl_matrix_complex_transpose_memcpy " .ie n .IP """gsl_matrix_complex_isnull """ 1 .el .IP "\f(CWgsl_matrix_complex_isnull \fR" 1 .IX Item "gsl_matrix_complex_isnull " .ie n .IP """gsl_matrix_complex_ispos """ 1 .el .IP "\f(CWgsl_matrix_complex_ispos \fR" 1 .IX Item "gsl_matrix_complex_ispos " .ie n .IP """gsl_matrix_complex_isneg """ 1 .el .IP "\f(CWgsl_matrix_complex_isneg \fR" 1 .IX Item "gsl_matrix_complex_isneg " .ie n .IP """gsl_matrix_complex_add """ 1 .el .IP "\f(CWgsl_matrix_complex_add \fR" 1 .IX Item "gsl_matrix_complex_add " .ie n .IP """gsl_matrix_complex_sub """ 1 .el .IP "\f(CWgsl_matrix_complex_sub \fR" 1 .IX Item "gsl_matrix_complex_sub " .ie n .IP """gsl_matrix_complex_mul_elements """ 1 .el .IP "\f(CWgsl_matrix_complex_mul_elements \fR" 1 .IX Item "gsl_matrix_complex_mul_elements " .ie n .IP """gsl_matrix_complex_div_elements """ 1 .el .IP "\f(CWgsl_matrix_complex_div_elements \fR" 1 .IX Item "gsl_matrix_complex_div_elements " .ie n .IP """gsl_matrix_complex_scale """ 1 .el .IP "\f(CWgsl_matrix_complex_scale \fR" 1 .IX Item "gsl_matrix_complex_scale " .ie n .IP """gsl_matrix_complex_add_constant """ 1 .el .IP "\f(CWgsl_matrix_complex_add_constant \fR" 1 .IX Item "gsl_matrix_complex_add_constant " .ie n .IP """gsl_matrix_complex_add_diagonal """ 1 .el .IP "\f(CWgsl_matrix_complex_add_diagonal \fR" 1 .IX Item "gsl_matrix_complex_add_diagonal " .ie n .IP """gsl_matrix_complex_get_row""" 1 .el .IP "\f(CWgsl_matrix_complex_get_row\fR" 1 .IX Item "gsl_matrix_complex_get_row" .ie n .IP """gsl_matrix_complex_get_col""" 1 .el .IP "\f(CWgsl_matrix_complex_get_col\fR" 1 .IX Item "gsl_matrix_complex_get_col" .ie n .IP """gsl_matrix_complex_set_row""" 1 .el .IP "\f(CWgsl_matrix_complex_set_row\fR" 1 .IX Item "gsl_matrix_complex_set_row" .ie n .IP """gsl_matrix_complex_set_col""" 1 .el .IP "\f(CWgsl_matrix_complex_set_col\fR" 1 .IX Item "gsl_matrix_complex_set_col" .PD .PP For more information on the functions, we refer you to the \s-1GSL\s0 offcial documentation .SH "AUTHORS" .IX Header "AUTHORS" Jonathan \*(L"Duke\*(R" Leto and Thierry Moisan .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (C) 2008\-2011 Jonathan \*(L"Duke\*(R" Leto and Thierry Moisan .PP This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.