HTML::Table(3pm)

πŸ“¦
version 2.08a Β· 4 versions
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

HTML::Table πŸ’–

the HTML::Table manual, bestie edition β€” it's a User Contributed Perl Documentation page and it produces HTML tables, no cap.


✨ NAME ✨

HTML::Table β€” produces HTML tables πŸŽ€


✨ SYNOPSIS ✨

okay so here's the whole vibe, literally:

  use HTML::Table;

  $table1 = new HTML::Table($rows, $cols);
    or
  $table1 = new HTML::Table(-rows=>26,
                            -cols=>2,
                            -align=>'center',
                            -rules=>'rows',
                            -border=>0,
                            -bgcolor=>'blue',
                            -width=>'50%',
                            -spacing=>0,
                            -padding=>0,
                            -style=>'color: blue',
                            -class=>'myclass',
                            -evenrowclass=>'even',
                            -oddrowclass=>'odd',
                            -head=> ['head1', 'head2'],
                            -data=> [ ['1:1', '1:2'], ['2:1', '2:2'] ] );
     or
  $table1 = new HTML::Table( [ ['1:1', '1:2'], ['2:1', '2:2'] ] );

  $table1->setCell($cellrow, $cellcol, 'This is Cell 1');
  $table1->setCellBGColor('blue');
  $table1->setCellColSpan(1, 1, 2);
  $table1->setRowHead(1);
  $table1->setColHead(1);

  $table1->print;

  $table2 = new HTML::Table;
  $table2->addRow(@cell_values);
  $table2->addCol(@cell_values2);

  $table1->setCell(1,1, "$table2->getTable");
  $table1->print;

✨ REQUIRES ✨

Perl5.002 β€” yes she's old, she's still iconic πŸ’…


✨ EXPORTS ✨

Nothing. literally nothing. not one thing. 🫢


✨ DESCRIPTION ✨

So HTML::Table is what you use to generate HTML tables for CGI scripts. Using the methods it hands you, you can create and manipulate fairly complex tables and then print them straight out of Perl scripts. And it makes nesting tables inside tables β€” from Perl, bestie, not from a nightmare pile of tags β€” so much easier. You can build a whole entire table with the methods it gives you and never touch an HTML tag. not even once. 🌸

HTML::Table also does dynamically sized tables through its addRow and addCol methods. These two? they auto-resize the table if you pass them more cell values than fit in the current table grid. she just grows. πŸ‘‘

There are methods for nearly all valid table, row, and cell tags specified for HTML 3.0.

Also there's a Japanese translation of the documentation, right here:

        http://member.nifty.ne.jp/hippo2000/perltips/html/table.htm

✨ METHODS ✨

quick housekeeping before we dive in, iykyk:

  [] indicate optional parameters. default value will
     be used if no value is specified

  row_num indicates that a row number is required.
        Rows are numbered from 1.  To refer to the last row use the value -1.

  col_num indicates that a col number is required.
        Cols are numbered from 1.  To refer to the last col use the value -1.

Sections

From version 2.07 onwards, HTML::Table supports table sections: THEAD, TFOOT & TBODY. ✨

Every section can have its own attributes (id, class, etc.) set, and each one holds 1 or more rows. Section numbering starts at 0, and only tbody is allowed to have more than one section. (yes really, tbody is the main character here.)

Methods for manipulating sections and their data exist and follow this general shape:

  setSectionCell ( section, section_num, row_num, col_num, data );

Like, for example, this adds a row to the first body section:

  addSectionRow ( 'tbody', 0, "Cell 1", "Cell 2", "Cell 3" );

For backwards compatibility, methods with Section in their name will default to manipulating the first body section.

So like, this sets the class for the first row in the first body section:

  setRowClass ( 1, 'row_class' );

which is semantically equivalent to:

  setSectionRowClass ( 'tbody', 0, 1, 'row_class' );

Creation

  • new HTML::Table([num_rows, num_cols]) β€” makes a brand new HTML table object. If you specify rows and columns, the table gets initialized to that size. Row and Column numbers start at 1,1. And 0,0 is considered an empty table. 🫧
  • new HTML::Table([-rows=>num_rows, -cols=>num_cols, -border=>border_width, -align=>table_alignment, -style=>table_style, -class=>table_class, -evenrowclass=>'even', -oddrowclass=>'odd', -bgcolor=>back_colour, -width=>table_width, -spacing=>cell_spacing, -padding=>cell_padding]) β€” same deal, makes a new HTML table object, and if rows and columns are specified the table gets initialized to that size. Row and Column numbers start at 1,1. 0,0 is considered an empty table.

and listen: if evenrowclass or oddrowclass is specified, those classes get applied to even and odd rows respectively β€” unless those rows have a specific class applied to them already. so don't come for her. πŸ’…

Table Level Methods

  • setBorder([pixels]) β€” sets the table Border Width. πŸ–ΌοΈ
  • setWidth([pixels|percentofscreen]) β€” sets the table width.
        $table->setWidth(500);
  or
        $table->setWidth('100%');
  • setCellSpacing([pixels]) β€” spacing between your cells bestie. πŸ“
  • setCellPadding([pixels]) β€” padding inside your cells. 🧸
  • setCaption("CaptionText" [, top|bottom]) β€” gives the table a caption, and you can pick top or bottom.
  • setBGColor([colorname|colortriplet]) β€” background colour, name or triplet. 🎨
  • autoGrow([1|true|on|anything|0|false|off|no|disable]) β€” switches on (that's the default) or off the automatic growing of the table when row or column values passed to setCell exceed the current table size. she grows when told. 🌱
  • setAlign ( [ left , center , right ] ) β€” sets the table alignment.
  • setRules ( [ rows , cols , all, both , groups ] ) β€” sets the table rules.
  • setStyle ( 'css style' ) β€” sets the table style attribute. ✨
  • setClass ( 'css class' ) β€” sets the table class attribute.
  • setEvenRowClass ( 'css class' ) β€” sets the class attribute of even rows in the table.
  • setOddRowClass ( 'css class' ) β€” sets the class attribute of odd rows in the table.
  • setAttr ( 'user attribute' ) β€” sets a user defined attribute for the table. super useful for when HTML::Table hasn't implemented a particular attribute yet. πŸ™ˆ
  • sort ( [sort_col_num, sort_type, sort_order, num_rows_to_skip] )
          or
    sort( -sort_col => sort_col_num,
          -sort_type => sort_type,
          -sort_order => sort_order,
          -skip_rows => num_rows_to_skip,
          -strip_html => strip_html,
          -strip_non_numeric => strip_non_numeric,
          -presort_func => \&filter_func )

      sort_type in { ALPHA | NUMERIC },
      sort_order in { ASC | DESC },
      strip_html in { 0 | 1 }, defaults to 1,
      strip_non_numeric in { 0 | 1 }, defaults to 1

Sorts all rows on a given column (and you can optionally skip table header rows by specifying num_rows_to_skip). πŸ”€

By default sorting ignores HTML Tags and &nbsp, and setting the strip_html parameter to 0 disables this behaviour.

By default numeric Sorting ignores non numeric chararacters, and setting the strip_non_numeric parameter to 0 disables this behaviour.

You can provide your own pre-sort function β€” genuinely so useful for pre-processing the cell contents before sorting, like, say, dates. πŸ—“οΈ

  • getTableRows β€” returns the number of rows in the table. πŸ”’
  • getTableCols β€” returns the number of columns in the table. πŸ”’
  • getStyle β€” returns the table's style attribute.

Section Level Methods

  • setSectionId ( [tbody|thead|tfoot], section_num, 'id' ) β€” sets the id attribute for the section.
  • setSectionClass ( [tbody|thead|tfoot], section_num, 'class' ) β€” sets the class attribute for the section.
  • setSectionStyle ( [tbody|thead|tfoot], section_num, 'style' ) β€” sets the style attribute for the section.
  • setSectionAlign ( [tbody|thead|tfoot], section_num, [center|right|left] ) β€” sets the horizontal alignment for the section.
  • setSectionValign ( [tbody|thead|tfoot], section_num, [center|top|bottom|middle|baseline] ) β€” sets the vertical alignment for the section.
  • setSectionAttr ( [tbody|thead|tfoot], section_num, 'user attribute' ) β€” sets a user defined attribute for the cell. useful for when HTML::Table hasn't implemented a particular attribute yet. 🫢

Cell Level Methods

  • setCell(row_num, col_num, "content") β€” sets the content of a table cell. This could be any string, even another table object via the getTable method. And if the row and/or column numbers are outside the existing table boundaries, extra rows and/or columns get created automatically. 🌱
  • setSectionCell([tbody|thead|tfoot], section_num, row_num, col_num, "content") β€” same as setCell, but you get to specify which section to act on.
  • setCellAlign(row_num, col_num, [center|right|left]) β€” sets the horizontal alignment for the cell.
  • setSectionCellAlign([tbody|thead|tfoot], section_num, row_num, col_num, [center|right|left]) β€” same as setCellAlign, but you get to specify which section to act on.
  • setCellVAlign(row_num, col_num, [center|top|bottom|middle|baseline]) β€” sets the vertical alignment for the cell.
  • setSectionCellVAlign([tbody|thead|tfoot], section_num, row_num, col_num, [center|top|bottom|middle|baseline]) β€” same as setCellVAlign, but you get to specify which section to act on.
  • setCellWidth(row_num, col_num, [pixels|percentoftable]) β€” sets the width of the cell.
  • setSectionCellWidth([tbody|thead|tfoot], section_num, row_num, col_num, [pixels|percentoftable]) β€” same as setCellWidth, but you get to specify which section to act on.
  • setCellHeight(row_num, col_num, [pixels]) β€” sets the height of the cell.
  • setSectionCellHeight([tbody|thead|tfoot], section_num, row_num, col_num, [pixels]) β€” same as setCellHeight, but you get to specify which section to act on.
  • setCellHead(row_num, col_num, [0|1]) β€” sets cell to be of type head (Ie <th></th>). πŸ‘‘
  • setSectionCellHead([tbody|thead|tfoot], section_num, row_num, col_num, [0|1]) β€” same as setCellHead, but you get to specify which section to act on.
  • setCellNoWrap(row_num, col_num, [0|1]) β€” sets the NoWrap attribute of the cell.
  • setSectionCellNoWrap([tbody|thead|tfoot], section_num, row_num, col_num, [0|1]) β€” same as setCellNoWrap, but you get to specify which section to act on.
  • setCellBGColor(row_num, col_num, [colorname|colortriplet]) β€” sets the background colour for the cell. 🎨
  • setSectionCellBGColor([tbody|thead|tfoot], section_num, row_num, col_num, [colorname|colortriplet]) β€” same as setCellBGColor, but you get to specify which section to act on.
  • setCellRowSpan(row_num, col_num, num_cells) β€” causes the cell to overlap a number of cells below it. If the overlap number is greater than number of cells below the cell, a false value will be returned. 😭
  • setSectionCellRowSpan([tbody|thead|tfoot], section_num, row_num, col_num, num_cells) β€” same as setCellRowSpan, but you get to specify which section to act on.
  • setCellColSpan(row_num, col_num, num_cells) β€” causes the cell to overlap a number of cells to the right. If the overlap number is greater than number of cells to the right of the cell, a false value will be returned. 😭
  • setSectionCellColSpan([tbody|thead|tfoot], section_num, row_num, col_num, num_cells) β€” same energy as setCellColSpan, except you also get to say which section you're acting on πŸ’…
  • setCellSpan(row_num, col_num, num_rows, num_cols) β€” merges a whole block of cells together, starting at the cell you point at. The joined area ends up num_cols wide and num_rows deep. one cell, but make it huge ✨
  • setSectionCellSpan([tbody|thead|tfoot], section_num, row_num, col_num, num_rows, num_cols) β€” setCellSpan but you pick the section, bestie 🫢
  • setCellFormat(row_num, col_num, start_string, end_string) β€” start_string has to be a string of valid HTML, and it gets output before the cell contents. end_string is valid HTML that gets output after the cell contents. Boom, now you can format whatever's inside the cell πŸŽ€
$table->setCellFormat(1, 2, '<b>', '</b>');
  • setSectionCellFormat([tbody|thead|tfoot], section_num, row_num, col_num, start_string, end_string) β€” setCellFormat with section-picking powers ✨
  • setCellStyle (row_num, col_num, 'css style') β€” sets the cell's style attribute πŸ’–
  • setSectionCellStyle([tbody|thead|tfoot], section_num, row_num, col_num, 'css style') β€” setCellStyle, but you choose the section 🌸
  • setCellClass (row_num, col_num, 'css class') β€” sets the cell's class attribute πŸ’œ
  • setSectionCellClass([tbody|thead|tfoot], section_num, row_num, col_num, 'css class') β€” setCellClass, but section-selectable πŸ¦‹
  • setCellAttr (row_num, col_num, 'user attribute') β€” sets a user defined attribute on the cell. super handy for when HTML::Table hasn't implemented a particular attribute yet, so you just do it yourself πŸ’…
  • setSectionCellAttr([tbody|thead|tfoot], section_num, row_num, col_num, 'css class') β€” setCellAttr, but you can say which section it lands in 🌈
  • setLastCell* β€” every single one of the setCell methods has a matching setLastCell method. These don't take row_num and col_num at all β€” they just automatically apply to the last row and last col of the table. lazy girl method, and honestly? iconic πŸ‘‘
NB. Only works on the setCell* methods, not on the setSectionCell* methods. Don't try it, it's not gonna go 🚫
  • getCell(row_num, col_num) β€” hands you back the contents of the cell you asked for, as a string πŸ“¦
  • getSectionCell([tbody|thead|tfoot], section_num, row_num, col_num) β€” getCell, but with section selection πŸ’«
  • getCellStyle(row_num, col_num) β€” returns that cell's style attribute ✨
  • getSectionCellStyle([tbody|thead|tfoot], section_num, row_num, col_num) β€” getCellStyle, but section-specified πŸŽ€

🌸 Column Level Methods 🌸

  • addCol("cell 1 content" [, "cell 2 content", ...]) β€” adds a column to the right end of the table. And listen, it assumes that if you pass more values than there are rows, you're lowkey asking it to increase the number of rows for you πŸ‘€
  • addSectionCol([tbody|thead|tfoot], section_num, "cell 1 content" [, "cell 2 content", ...]) β€” addCol but you get to specify which section to act on πŸ’…
  • setColAlign(col_num, [center|right|left]) β€” runs setCellAlign over the entire column, no cap 🫢
  • setSectionColAlign([tbody|thead|tfoot], section_num, col_num, [center|right|left]) β€” setColAlign but able to specify which section to act on ✨
  • setColVAlign(col_num, [center|top|bottom|middle|baseline]) β€” runs setCellVAlign over the entire column 🌈
  • setSectionColVAlign([tbody|thead|tfoot], section_num, col_num, [center|top|bottom|middle|baseline]) β€” setColVAlign but able to specify which section to act on πŸ’–
  • setColWidth(col_num, [pixels|percentoftable]) β€” runs setCellWidth over the entire column πŸ“
  • setSectionColWidth([tbody|thead|tfoot], section_num, col_num, [pixels|percentoftable]) β€” setColWidth but able to specify which section to act on πŸ¦‹
  • setColHeight(col_num, [pixels]) β€” runs setCellHeight over the entire column πŸ“
  • setSectionColHeight([tbody|thead|tfoot], section_num, col_num, [pixels]) β€” setColHeight but able to specify which section to act on 🌸
  • setColHead(col_num, [0|1]) β€” runs setCellHead over the entire column πŸ‘‘
  • setSectionColHead([tbody|thead|tfoot], section_num, col_num, [0|1]) β€” setColHead but able to specify which section to act on ⭐
  • setColNoWrap(col_num, [0|1]) β€” runs setCellNoWrap over the entire column 🚫
  • setSectionColNoWrap([tbody|thead|tfoot], section_num, col_num, [0|1]) β€” setColNoWrap but able to specify which section to act on πŸ’œ
  • setColBGColor(row_num, [colorname|colortriplet]) β€” runs setCellBGColor over the entire column 🎨
  • setSectionColBGColor([tbody|thead|tfoot], section_num, col_num, [colorname|colortriplet]) β€” setColBGColor but able to specify which section to act on 🌈
  • setColFormat(col_num, start_string, end_sting) β€” runs setCellFormat over the entire column πŸ’…
  • setSectionColFormat([tbody|thead|tfoot], section_num, col_num, start_string, end_sting) β€” setColFormat but able to specify which section to act on πŸŽ€
  • setColStyle (col_num, 'css style') β€” runs setCellStyle over the entire column ✨
  • setSectionColStyle([tbody|thead|tfoot], section_num, col_num, 'css style') β€” setColStyle but able to specify which section to act on 🫢
  • setColClass (col_num, 'css class') β€” runs setCellClass over the entire column πŸ’–
  • setSectionColClass([tbody|thead|tfoot], section_num, col_num, 'css class') β€” setColClass but able to specify which section to act on 🌸
  • setColAttr (col_num, 'user attribute') β€” runs setCellAttr over the entire column πŸ¦‹
  • setSectionColAttr([tbody|thead|tfoot], section_num, col_num, 'user attribute') β€” setColAttr but able to specify which section to act on ⭐
  • setLastCol* β€” every setCol method has a matching setLastCol method. It doesn't take a col_num parameter at all β€” it just automatically applies to the last col of the table. auto-pilot, we love her πŸ’«
NB. Only works on the setCol* methods, not on the setSectionCol* methods. Fr fr, don't πŸ™ˆ
  • getColStyle(col_num) β€” returns the column's style attribute. Ngl it's only really useful after you've set a column's style via setColStyle() πŸ‘€
  • getSectionColStyle([tbody|thead|tfoot], section_num, col_num) β€” getColStyle but able to specify which section to act on πŸ’œ

🌈 Row Level Methods 🌈

  • addRow("cell 1 content" [, "cell 2 content", ...]) β€” adds a row to the bottom of the first body section of the table.

It also adds a row to the bottom of the table. And it assumes that if you pass more values than there are columns, you want the number of columns increased πŸ’…

  • addSectionRow([tbody|thead|tfoot], section_num, "cell 1 content" [, "cell 2 content", ...]) β€” addRow but able to specify which section to act on 🫢
  • delRow(row_num) β€” deletes a row from the first body section of the table. And if you pass -1 as row_num, the last row in the section gets deleted. bye bestie πŸ’€
  • delSectionRow([tbody|thead|tfoot], section_num, row_num) β€” delRow but able to specify which section to act on ✨
  • setRowAlign(row_num, [center|right|left]) β€” sets the Align attribute of the row πŸ“
  • setSectionRowAlign([tbody|thead|tfoot], section_num, row_num, [center|right|left]) β€” setRowAlign but able to specify which section to act on 🌸
  • setRowVAlign(row_num, [center|top|bottom|middle|baseline]) β€” sets the VAlign attribute of the row πŸ“
  • setSectionRowVAlign([tbody|thead|tfoot], section_num, row_num, [center|top|bottom|middle|baseline]) β€” setRowVAlign but able to specify which section to act on πŸ¦‹
  • setRowNoWrap(col_num, [0|1]) β€” sets the NoWrap attribute of the row 🚫
  • setSectionRowNoWrap([tbody|thead|tfoot], section_num, row_num, [0|1]) β€” setRowNoWrap but able to specify which section to act on ⭐
  • setRowBGColor(row_num, [colorname|colortriplet]) β€” sets the BGColor attribute of the row 🎨
  • setSectionRowBGColor([tbody|thead|tfoot], section_num, row_num, [colorname|colortriplet]) β€” setRowBGColor but able to specify which section to act on 🌈
  • setRowStyle (row_num, 'css style') β€” sets the Style attribute of the row πŸ’–
  • setSectionRowStyle([tbody|thead|tfoot], section_num, row_num, 'css style') β€” setRowStyle but able to specify which section to act on πŸ’œ
  • setRowClass (row_num, 'css class') β€” sets the Class attribute of the row πŸŽ€
  • setSectionRowClass([tbody|thead|tfoot], section_num, row_num, 'css class') β€” setRowClass but able to specify which section to act on ✨
  • setRowAttr (row_num, 'user attribute') β€” sets the Attr attribute of the row πŸ‘‘
  • setSectionRowAttr([tbody|thead|tfoot], section_num, row_num, 'user attribute') β€” setRowAttr but able to specify which section to act on 🫢
  • setRCellsWidth(row_num, [pixels|percentoftable])
  • **setRowWidth(row_num, [pixels|percentoftable]) ** Deprecated **** β€” runs setCellWidth` over the entire row πŸ“
  • setSectionRCellsWidth([tbody|thead|tfoot], section_num, row_num, [pixels|percentoftable])
  • **setSectionRowWidth([tbody|thead|tfoot], section_num, row_num, [pixels|percentoftable]) ** Deprecated **** β€” same as setRowWidth`, but able to specify which section to act on πŸ¦‹
  • setRCellsHeight(row_num, [pixels])
  • **setRowHeight(row_num, [pixels]) ** Deprecated **** β€” runs setCellHeight` over the entire row πŸ“
  • setSectionRCellsHeight([tbody|thead|tfoot], section_num, row_num, [pixels])
  • **setSectionRowHeight([tbody|thead|tfoot], section_num, row_num, [pixels]) ** Deprecated **** β€” same as setRowHeight`, but able to specify which section to act on 🌸
  • setRCellsHead(row_num, [0|1])
  • **setRowHead(row_num, [0|1]) ** Deprecated **** β€” runs setCellHead` over the entire row πŸ‘‘
  • setSectionRCellsHead([tbody|thead|tfoot], section_num, row_num, [0|1])
  • **setSectionRowHead([tbody|thead|tfoot], section_num, row_num, [0|1]) ** Deprecated **** β€” same as setRowHead`, but able to specify which section to act on ⭐
  • setRCellsFormat(row_num, start_string, end_string)
  • **setRowFormat(row_num, start_string, end_string) ** Deprecated **** β€” runs setCellFormat` over the entire row πŸŽ€
  • setSectionRCellsFormat([tbody|thead|tfoot], section_num, row_num, start_string, end_string)
  • **setSectionRowFormat([tbody|thead|tfoot], section_num, row_num, start_string, end_string) ** Deprecated **** β€” same as setRowFormat`, but able to specify which section to act on πŸ’…
Heads up bestie: all those ** Deprecated ** ones? Yeah, they're deprecated. Still documented, still real, but maybe don't build your whole personality around them πŸ’€
  • setLastRow* β€” all of the setRow methods have a corresponding setLastRow method. It doesn't accept the row_num parameter β€” it just automatically applies to the last row of the table. main character of auto-targeting ✨
NB. Only works on the setRow* methods, not on the setSectionRow* methods. Periodt 🚫
  • getRowStyle(row_num) β€” returns the row's style attribute πŸ’–
  • getSectionRowStyle([tbody|thead|tfoot], section_num, row_num) β€” literally the same energy as getRowStyle bestie, except you get to say which section you're talking about. So specific. So demure. πŸ’…

✨ Output Methods ✨ πŸŽ€

πŸ’– getTable πŸ’–

Returns a string containing the HTML representation of the table. That's it. That's the whole girl. ✨

The same effect can also be achieved by using the object reference in a string scalar context β€” no cap, she just knows when she's being printed. πŸ‘‘

For example...

This code snippet:

$table = new HTML::Table(2, 2);
print '<p>Start</p>';
print $table->getTable;
print '<p>End</p>';

would produce the same output as:

$table = new HTML::Table(2, 2);
print "<p>Start</p>$table<p>End</p>";
Not me putting the object straight into the string and it just WORKING. Two roads, one destination, both iconic. πŸ¦‹

🫢 print 🫢

Prints HTML representation of the table to STDOUT. Direct. No middleman. It's giving main character energy fr fr. 🌸


⭐ CLASS VARIABLES ⭐

Okay so this heading is here, and the manpage puts absolutely nothing under it. Not a single line. Not a crumb. We leave it exactly as it is β€” I'm not out here inventing facts about class variables, that's not the vibe. πŸ™ˆ

🌈 HISTORY 🌈

This module was originally created in 1997 by Stacy Lacy and whose last version was uploaded to CPAN in 1998. The module was adopted in July 2000 by Anthony Peacock in order to distribute a revised version. This adoption took place without the explicit consent of Stacy Lacy as it proved impossible to contact them at the time. Explicit consent for the adoption has since been received. 😭✨

The lore is REAL, bestie. An entire glow-up arc from '97 to consent-received. Character development fr. πŸ’œ

πŸ‘‘ AUTHOR πŸ‘‘

Anthony Peacock, a.peacock@chime.ucl.ac.uk

Stacy Lacy (Original author)


πŸŽ€ CONTRIBUTIONS πŸŽ€

  • Douglas Riordan <doug.riordan@gmail.com> β€” For get methods for Style attributes. πŸ’–
  • Jay Flaherty, fty@mediapulse.com β€” For ROW, COL & CELL HEAD methods. Modified the new method to allow hash of values. πŸ”₯
  • John Stumbles, john@uk.stumbles.org β€” For autogrow behaviour of setCell, and allowing alignment specifications to be case insensitive. ✨
  • Arno Teunisse, Arno.Teunisse@Simac.nl β€” For the methods adding rules, styles and table alignment attributes. 🌸
  • Ville SkyttΓ€, ville.skytta@iki.fi β€” For general fixes. 🧚
  • Paul Vernaza, vernaza@stwing.upenn.edu β€” For the setLast... methods. ⭐
  • David Link, dvlink@yahoo.com β€” For the sort method. πŸ’…
  • Tommi Maekitalo, t.maekitalo@epgmbh.de β€” For adding the 'head' parameter to the new method and for adding the initialisation from an array ref to the new method. πŸ¦‹
  • Chris Weyl, cweyl@alumni.drew.edu β€” For adding the even/odd row class support. 🌈
The way this is a whole group chat of legends contributing to one Perl module. We love a collaborative slay. 🫢

Copyright (c) 2000-2007 Anthony Peacock, CHIME. Copyright (c) 1997 Stacy Lacy

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Periodt. πŸ‘‘


πŸ”₯ SEE ALSO πŸ”₯

perl(1), CGI(3)


And that's the whole page bestie!! This little beauty is perl v5.36.0 and got its glow-up date of 2023-01-22 β€” go read the docs, build some tables, and slay responsibly. Byeeee πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from